在malloc之后的while循环之后的分段错误

时间:2015-03-31 05:04:14

标签: c arrays pointers segmentation-fault malloc

我正在尝试动态创建一个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]);
    }

2 个答案:

答案 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;

修改

另外,使用mallocfree需要#include <stdlib.h>,而#include <string.h>使用strcopyint i=0;应该代替{ {1}},并且指针的正确空值为i=0;

什么是NULL?我没有看到声明或定义?你的意思是dArray

<强> EDIT2:

以下是我的程序版本:

twoArray

答案 1 :(得分:1)

free()内的twoArray randomArrayofStrings()并未对您进行推测。一旦完成使用分配的记忆,你必须在main()内释放它们。

也就是说,您在sizeof(localArray)中使用main()的方式是错误的。您必须使用您用于调整twoArray的确切值。