【发布时间】:2021-05-27 15:03:24
【问题描述】:
在使用calloc() 分配内存以创建字符串数组后,我想尝试释放它并确保字符串和字符串指针都被永久删除。
代码如下
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
char **arr;
arr = calloc(3, sizeof(char *));
arr[0] = calloc(30, sizeof(char));
arr[1] = calloc(30, sizeof(char));
arr[2] = calloc(30, sizeof(char));
arr[0] = "jhgfdjhgfdjhgfds";
arr[1] = "oru95u9iojituy";
arr[2] = "hggpooki0opkopreiyh";
free(arr[2]); free(arr[1]); free(arr[0]);
//free(arr[0]); free(arr[1]); free(arr[2]);
free(arr);
}
正如你最后看到的,我试图释放分配给字符串的内存。在注释行中,我尝试以相反的方向释放内存,认为我必须遵循字符串在数组中出现的顺序。 尽管如此,我总是收到以下错误:
free(): invalid pointer
我无法理解这个问题。我知道每个calloc () / malloc () 必须有其各自的free ()。 arr [i] 中似乎没有内存地址,即使我调用了 calloc。
如何才能完全释放内存?
【问题讨论】:
-
你不是在释放你分配的内存,而是在尝试释放字符串文字的内存。
-
你可以使用
arr[0] = strdup("jhgfdjhgfdjhgfds");等
标签: c