为什么这段代码在windows中运行良好而在linux中运行不正常?

时间:2016-09-06 14:10:01

标签: pointers readfile fgets

我遇到了一个问题,我在windows中编写这段代码,读取文件的每一行。它在Windows 7中运行良好,但在liunx中运行不佳。我真的无法弄明白。有人可以帮帮我吗?

list< list<string> > getTransRecordsFormFile(const char* fileName)
{
    list< list<string> > res;
    FILE* f = fopen(fileName,"r");
    if(f == NULL) {
        cout << "load input file failed!" << endl;
        exit(0);
    }
    else {
        char *buffer;
        while(fgets(buffer,MAX_LENTH,f) != NULL) {
            list<string> v = splitStr(buffer, SPLITCHAR);
            res.push_back(v);
        }
    }
    fclose(f);
    return res;
}

我和我的同学们发现&#34; fgets&#34;在这段代码中是错误的,但我不知道它在windows中运行良好。

1 个答案:

答案 0 :(得分:1)

在您的代码中,buffer保留了酉。因此,很可能(且最有可能)指向某些无效的内存位置。访问无效内存会调用undefined behavior。一旦你的程序击中UB,绝对没有

您必须先将buffer指向某个有效的内存位置,然后才能在fgets()中使用它。