【发布时间】:2020-01-17 18:13:16
【问题描述】:
我想知道如何正确释放这个数组,这样我在编译文件时就不会收到下一个错误。 “ooo”是我存储在数组中的字符串
哦哦
呜呜
呜呜
哎哟`./a.out' 中的错误:munmap_chunk():无效指针: 0x0000000000400774
中止(核心转储)
我正在学习 C,如果有人能告诉我如何修复错误以及发生错误的原因,我将不胜感激。
代码如下:
#include <stdio.h>
#include<stdlib.h>
#define width 5
#define height 10
char** arrayFunction(){
char** arrayInFunction = malloc(height * sizeof(char*));
for(int i=0; i < height; i++){
arrayInFunction[i] = malloc(width * sizeof(char));
}
return arrayInFunction;
}
int main()
{
char** array = arrayFunction();
array[0] = "ooo";
array[1] = "ooo";
array[2] = "ooo";
array[3] = "ooo";
for(int i=0; i < height; i++){
printf("%s\n",array[i]);
}
//free the array created in main
for(int i=0; i < height; i++){
free(array[i]);
}
free(array);
return 0;
}
【问题讨论】:
-
行:
replacearray[0] = "ooo";` 将位于内存位置array[0]中的指针设置为指向存储指定值的受保护内存数组细绳。您很可能无法释放该内存。您要做的是使用标准库函数strcpy将字符串"ooo"复制到您之前在arrayFunction例程中分配的内存位置。
标签: c arrays multidimensional-array dynamic-memory-allocation