我正在读这个函数。我使用的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故障(手动或在函数返回时自动)。