我正在研究这个功能。我使用的main
在文件I / O中没有问题,它连接正常,关闭,文件也没问题。但是,我在阅读结束时遇到了分段错误。我已经尝试打印出来进行测试,错误是读取最后一行。它完成了字符串a
的最后一行,然后是x
,然后in.good()
也变为假。我已尝试重置in.clear()
,如果a="";
变为false,则设置字符串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);
}
}
答案 0 :(得分:8)
您看到一个段错误,因为您没有为ch
分配空间,然后您尝试在其上复制一个字符串。 ch
是未初始化的内存地址,不属于您。
您需要为字符串分配空间:
char *ch = new[(MAX_SIZE + 1) * sizeof(char)];
但为什么你需要char *
呢?请注意,如果您必须拥有C字符串,则始终可以传递a
并使用a.c_str()
。我不确定Word
是什么,或者它是否需要它自己的字符串副本,但您可以使用:Word cwd(a.c_str())
吗?
答案 1 :(得分:0)
您似乎没有为char *ch
分配内存存储空间。定义此变量的那一刻,它是堆栈上的随机值。写入随机存储器会损坏存储器并在清理存储器时导致seg故障(手动或在功能返回时自动)。