0

我正在研究这个功能读取。我使用的main文件I / O没有问题,它连接正常,关闭,文件也可以。但是,在阅读结束时我遇到了分段错误。我已经尝试打印出来进行测试,错误是读取最后一行。它完成了 string 的最后一行的读取a,然后x, 然后in.good()也变为 false。我也尝试过重置in.clear()a="";如果in.good变为假,则设置字符串。没有任何工作。

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

2 回答 2

8

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

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

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

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

于 2012-08-06T02:10:54.760 回答
0

看来您没有为char *ch. 定义此变量的那一刻,它是堆栈上的随机值。在清理内存时(手动或在函数返回时自动)写入随机内存会损坏内存并导致段错误。

于 2012-08-06T02:10:55.747 回答