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



我正在读这个函数。我使用的main在文件I/O方面没有问题,它连接良好,关闭,文件也可以。然而,在阅读结束时,我遇到了一个分段错误。我试着打印出来进行测试,但错误是读取了最后一行。它完成读取字符串a的最后一行,然后是x,然后in.good()也变为false。我已经尝试过重置in.clear(),如果in.good变为false,也会设置字符串a="";。什么都不起作用。

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);   
    }
}

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

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

char *ch = new[(MAX_SIZE + 1) * sizeof(char)];

但是为什么你需要一个char *呢?请注意,如果必须具有C字符串,则可以始终绕过a并使用a.c_str()。我不确定Word是什么,也不确定它是否需要自己的字符串副本,但你能使用:Word cwd(a.c_str())吗?

您似乎没有为char *ch分配内存存储。定义此变量时,它是堆栈上的一个随机值。写入随机内存会损坏内存,并在清理内存时导致seg故障(手动或在函数返回时自动)。

相关内容

  • 没有找到相关文章

最新更新