我正在尝试动态创建一个2d数组,然后打开一个txt文件并复制每个lenient我的2d数组。然后将此数组保存回我的主程序。我一直遇到分段错误。有任何建议如何修复此代码? 顺便说一下,我认为这个问题在第二次发生循环后出现了......
#include<stdio.h>
char **randomArrayofStrings(){
char **twoArray=null;
int rows=50;
int col=20;
i=0;
FILE *file=null;
int messageSize=50;//this is number is trivial
file = fopen("somefile.txt","r");
twoArray= malloc(rows*sizeof(char*));
for(i=0;i<col;i++)
{
twoArray[i]=malloc(rows*sizeof(char));
strcpy(twoArray[i], "some random word");
}
while(!feof(file))
{
fgets(dArray[i],messageSize, file);
strtok(dArray[i], "\n");
i++;
}
return twoArray;
}
int main(int argc, char **argv)
{
char **localArray=null;
localArray=randomArrayofStrings();
for(i=0;i<20;i++)//20 is just a random number
printf("Strings: %s", localArray[i]);
}
答案 0 :(得分:2)
正如我所看到的,在你的函数中randomArrayofStrings
循环for
遍历代码中的列“i cols。所以,首先分配指针数组并将其视为cols
然后在循环中,您可以分配rows
。
在malloc
之后检查返回的值,如果在内存分配后它为NULL,则不使用指针。
要释放已分配的内存,请使用反向序列 - 在循环中释放所有rows
,而不是释放cols
一次。 E.g:
for(i=0;i<col;i++){
free(twoArray[i]);
}
free(twoArray);
twoArray = NULL;
修改强>
另外,使用malloc
和free
需要#include <stdlib.h>
,而#include <string.h>
使用strcopy
,int i=0;
应该代替{ {1}},并且指针的正确空值为i=0;
。
什么是NULL
?我没有看到声明或定义?你的意思是dArray
?
<强> EDIT2:强>
以下是我的程序版本:
twoArray
答案 1 :(得分:1)
free()
内的twoArray
randomArrayofStrings()
并未对您进行推测。一旦完成使用分配的记忆,你必须在main()
内释放它们。
也就是说,您在sizeof(localArray)
中使用main()
的方式是错误的。您必须使用您用于调整twoArray
的确切值。