指针数组的释放

指针数组释放时,释放数组中元素指向的内容即可,数组本身是在栈上,因此不需要手动释放

示例如下

#include
#include
typedef struct A A;
struct A{
    int a;
    char b;
};
int main()
{
    A* arr[2];
    for (int i = 0; i < 2; i++)
    {
        arr[i] = (A*)calloc(1, sizeof(A));
        arr[i]->a = i;
        arr[i]->b = 'A' + i; 
    }
    printf("1 %d\n", arr);
    free(arr[0]);
    free(arr[1]);
    printf("2 %d\n", arr);
    free(arr);
    printf("3 %d\n", arr);    
    return 0;
}

编译

PS D:\MyVSCode\C++> gcc -o .\main .\main.c -std=c99

编译输出如下:

.\main.c: In function 'main':
.\main.c:34:5: warning: attempt to free a non-heap object 'arr' [-Wfree-nonheap-object]
     free(arr);
     ^~~~~~~~~

编译输出说明:试图释放一个不是堆上的对象;所以arr本身不是在堆上
运行main.exe

.\main

输出如下

PS D:\MyVSCode\C++> .\main
1 6422016
2 6422016

你可能感兴趣的:(笔记,c语言,指针,数组)