繁体   English   中英

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

[英]c++, reading files, segmentation fault

我正在阅读此功能。 我使用的main文件在文件I / O中没有问题,它可以正常连接,关闭,文件也可以。 但是,在阅读结束时我遇到了段错误。 我尝试打印出进行测试,并且错误正在读取最后一行。 完成读取字符串a的最后一行,然后in.good() x ,然后in.good()变为false。 我试过重置in.clear() ,也设置字符串a=""; in.clear() 如果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);   
    }
}

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

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

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

但是为什么这里需要一个char * 请注意,如果必须具有C字符串,则始终可以绕过a并使用a.c_str() 我不确定Word是什么,或者是否需要它是字符串的副本,但是您可以使用: Word cwd(a.c_str())吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM