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

时间:2012-08-06 02:05:32

标签: c++ c file io segmentation-fault

我正在研究这个功能。我使用的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);   
    }
}

2 个答案:

答案 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故障(手动或在功能返回时自动)。