【发布时间】:2015-10-05 16:56:53
【问题描述】:
我有一个构建字符串数组 (char*) 的函数。
使用完数组后,我想释放它的内存,但随后出现CrtIsValidHeapPointer 错误。
代码:
int main(int argc, char * argv[])
{
char** arr = NULL;
creating_array(&arr); // Building the array
//free each string memory
for (size_t i = 0; i < 4; i++)
{
free(arr[i]);
}
// until here everything works fine :)
//free the array memory
free(arr); // Error CrtIsValidHeapPointer
return 0;
}
void creating_array(char*** pArr)
{
char** arr = (char**)malloc(4);
arr[0] = (char*)malloc(5 * sizeof(char));
strcpy(arr[0], "aaaa");
arr[1] = (char*)malloc(5 * sizeof(char));
strcpy(arr[1], "bbbb");
arr[2] = (char*)malloc(5 * sizeof(char));
strcpy(arr[2], "cccc");
arr[3] = (char*)malloc(5 * sizeof(char));
strcpy(arr[3], "dddd");
*pArr = arr;
}
为什么会这样?
【问题讨论】:
-
你没有正确分配内存。
-
硬编码的
malloc(4)的用途是什么? -
你想要
char** arr = malloc(4 * sizeof(char*));。另外,don't castmalloc。 @ameyCU 已修复。 -
你说得对。问题是我认为 char** 的 4 个插槽数组的大小为 4 个字节,但正确的方法是告诉他 molloc
(4 * sizeof(char**))。我可以假设 char** 指针需要保存更多信息,因此它的大小不仅仅是一个字节。 @MooseBoys