2012-08-06 90 views
0

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

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

哪一位已设置? 'badbit,eofbit或failbit'?这可能会给你一个好主意,接下来你需要看看。 – Aesthete 2012-08-06 02:10:40

回答

8

你看段错误,因为你不ch分配空间,然后你试图将一个字符串超过它复制。 ch是一个未初始化的内存地址,不属于你。

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

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

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

+0

同意。为什么需要一个cstring? – texasbruce 2012-08-06 02:14:37

+3

如果我在C++程序中使用'malloc'来捕获任何人,我会用他们自己的程序清单将他们打死:-) – paxdiablo 2012-08-06 02:30:40

+0

感谢您的帮助。我不得不在学校的最后一个任务中创建这个Word类,但是没有必要的字符串构造函数,或者不能直接使用a.c_str()函数返回我的Word类没有的const char *。 – teamaster 2012-08-06 02:47:05

0

看来你没有为char *ch分配内存。当你定义这个变量时,它是一个随机值。编写随机存储器会在清理内存时(手动或自动返回函数)破坏内存并导致段错误。