【发布时间】:2021-09-24 17:22:38
【问题描述】:
一个简单的初学者的困境,所以应该很快就会明白。
我正在尝试从 char 指针数组内的变量中释放分配的内存
这不会引发错误:
array= malloc(1*sizeof(char *) + 1);
array[0] = malloc(2*sizeof(char *));
free(array[0]);
然而,如果我给它添加一些值,我会得到一个错误:
array= malloc(2*sizeof(char *));
array[0] = malloc(2*sizeof(char *));
array[0] = "a";
free(array[0]);
(malloc: *** error for object 0x10......: 被释放的指针未被分配 malloc: *** 在 malloc_error_break 中设置断点进行调试)
如何解释以及如何处理?
【问题讨论】:
-
如果您想将
"a"存储在array[0],请使用strcpy。请注意,这很可能应该是array[0] = malloc(2*sizeof(char));(而不是size(char*))。通常,您malloc的空间应该是您分配的左值的sizeof()。此外,sizeof char始终为 1,因此一些 SO 用户主张完全省略它,在这种情况下,您将得到array[0] = malloc(2); -
这就解释了。谢谢
标签: c pointers memory-management dynamic-memory-allocation dynamic-arrays