【发布时间】:2013-11-22 14:44:23
【问题描述】:
我已经定义了返回多维数组的函数。
行分配
arr = (char **)malloc(size);
列分配(循环中)
arr[i] = (char *)malloc(v);
返回类型是char**
一切正常,除了释放内存。如果我在函数返回的数组上调用 free(arr[i]) 和/或 free(arr),它就会崩溃。
编辑:
分配函数
pole = malloc(zaznamov);
char ulica[52], t[52], datum[10];
float dan;
int i = 0, v;
*max = 0;
while (!is_eof(f))
{
get_record(t, ulica, &dan, datum, f);
v = strlen(ulica);
pole[i] = malloc(v);
strcpy(pole[i], ulica);
pole[i][v-1] = '\0';
if (v - 1 > *max)
{
*max = v;
}
i++;
}
return pole;
我调用函数的主要部分
pole = function();
释放内存
int i;
for (i = 0; i < zaznamov; i++)
{
free(pole[i]);
pole[i] = NULL;
}
free(pole);
pole = NULL;
【问题讨论】:
-
不要转换 malloc 的结果。
-
你能展示一个失败的完整例子吗?一般来说,每次调用
malloc之后都应该紧跟一次调用free,这样你描述的代码就可以工作了。该错误可能存在于您尚未告诉我们的代码中。 -
很可能它崩溃了,因为你在代码中的某个地方写了越界,破坏了 malloc 存储的元数据。
-
请在上面编辑您的问题,而不是在评论中写这么多代码。
标签: c memory-management malloc free