c ++,读取文件,分段错误

tea*_*ter 0 c c++ io file segmentation-fault

我正在研究这个功能.该main用我在文件我没有问题/ O,它连接罚款,关闭,这些文件都还好了.但是,我在阅读结束时遇到了分段错误.我已经尝试打印出来进行测试,错误是读取最后一行.它完成读取字符串的最后一行a,然后x,然后也in.good()变为假.我已经尝试重置in.clear(),a="";如果in.good变为false 则设置字符串.什么都行不通.

read(istream& in){
    string a;
    int x;
    in>>a;
    while( in.good() ){
        in>>x;
        char *ch;
        strcpy( ch, a.c_str() );
        Word cwd(ch);
        anObject.add(cwd,x);   
    }
}
Run Code Online (Sandbox Code Playgroud)

pb2*_*b2q 8

你看到一个段错误,因为你没有为其分配空间ch,然后你试图在它上面复制一个字符串.ch是一个不属于您的未初始化的内存地址.

您需要为字符串分配空间:

char *ch = new[(MAX_SIZE + 1) * sizeof(char)];
Run Code Online (Sandbox Code Playgroud)

但为什么你需要一个char *呢?请注意,如果必须有C字符串,则可以随时传递a并使用a.c_str().我不确定是什么Word,或者它是否需要它自己的字符串副本,但你可以使用:Word cwd(a.c_str())

  • 如果我在C++程序中捕获任何使用`malloc`的人,我会用自己的程序列表将它们打死:-) (3认同)