我想知道是否可以多次释放使用calloc
分配的char *
(字符串)。
char * signal;
for (int i = 0 ; i < n ; i++) {
signal = (char*) calloc(n, sizeof(char));
if (a = true) {
signal[i] = 1;
}
/* do stuff */
free(signal); /* error here : double free or corruption */
}
为什么我在 free()
上遇到错误?
最佳答案
would like to know if it's possible to free a char * (string) allocated with calloc but several times.
简短回答:否
长答案:调用 malloc()
一次, calloc()
, realloc(NULL, ...)
(*1) 允许(要求,不泄漏内存)恰好一次调用 free()
将由前者返回的值传递给后者。
因此,如果将已经 free()
ed 的地址传递给 free()
并假设在上次调用 后它没有被另一个分配返回free()
,然后代码调用未定义的行为,从那时起任何事情都可能发生。
(*1) 关于 realloc()
的注释:
连续调用
realloc()
而不传递NULL
不会增加对free()
的必要调用总和。换句话说char * p = malloc(42); p = realloc(43);
只需要一次调用
free()
free(p);
将
NULL
传递给realloc()
使realloc()
计数就像调用malloc()
.正在做
char * p = realloc(NULL, 42);
与做的一样
char * p = malloc(42);
关于c - 是否可以释放使用 calloc 分配的 char *",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45376127/