请考虑以下代码:
#include <stdio.h>
char** baz_alloc(int size)
{
char ** b = malloc((size+1) * sizeof(char*));
for (int i = 0; i < size; i++)
b[i] = "baz";
b[size] = NULL;
return b;
}
void baz_print(char** baz)
{
char** b = baz;
while (*b != NULL)
{
printf("%s\n", *b);
b++;
}
}
void baz_free(char** baz)
{
int len = 0;
char** b = baz;
for (; *b != NULL; len++, b++);
for (int i = 0; i < len; i++)
free(baz[i]);
free(baz);
}
int main()
{
char** baz = baz_alloc(10);
baz_print(baz);
baz_free(baz);
getch();
return 0;
}
调用
free
函数时程序崩溃。我在SO上看过类似的例子,看起来差不多我的密码怎么了?谢谢。
最佳答案
您正在调用此指针上的free()
:
b[i] = "baz"
该指针未分配
malloc()
(或calloc()
,realloc()
等)。关于c - 无法释放动态分配的二维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29848461/