"*** glibc detected *** ./a.out: free(): invalid pointer: 0xb786e6f4 ***".
我猜太阳群是我教授使用的,也就是我失去分数的原因。
我不确定为什么会发生这种情况,因为我没有明确地使用内存分配,而且从我读过的所有错误中,通常(并非总是)尝试删除未编写的内容的结果与新的运营商。我想知道是否感谢我正在做的来回的字符串/字符转换,但是对我来说仍然令人费解的是它在几个案例中运行正常然后就死了。
基本上这个程序的工作是询问文件名,读取文件并根据需要完成的每个字符串解释,然后进行数学运算直到文件结束。
这是我的代码:http://pastebin.com/1DW5pd6p
这是我正在使用的数据文件(再次注意我的程序在第二次操作后死亡):http://pastebin.com/xx59eQsu
我已经用char数组改进了一些字符串,这似乎让我得到了这两个操作,但是我很困惑。谢谢你的眼光,每个人。所有回复都表示赞赏。
答案 0 :(得分:3)
string str;
char chr[1];
...
sprintf(chr, "%u", sum);
你溢出chr
,这最有可能通过覆盖str
使用的一些内部指针变量来影响std::string
。当字符串被破坏时,它会尝试删除这个无效指针。
确保chr
足够大 - 例如char chr[32];
应该足以打印您的积分。