gpt4 book ai didi

用未分配的内存块写入的 C++ 文件

转载 作者:行者123 更新时间:2023-11-30 03:06:36 24 4
gpt4 key购买 nike

我正在编程,一个编码错误导致了问题:

ofstream myFile;
myFile.open("/home/guido/ejemplo.XX",ios::out | ios::binary | ios::trunc);
...
buffer = new char;
delete (buffer);
//write into file with accidentally freed memory block
myFile.close();
...
ifstream sameFile;
sameFile.open("/home/guido/ejemplo.XX",ios::in | ios::binary);
//Crashes at previous line

现在,如果我在 ifstream sameFile; 之前注释所有代码行,sameFile.open(...) 的执行就不会失败。我不确定为什么会这样。该程序是否跟踪非法写入/读取的文件? write(...)close() 函数在这个问题中做了什么?

最佳答案

我们不可能确切地知道它为什么会以这种方式崩溃。这就是 C++ 规范将其称为“未定义行为”的原因:它是语言定义之外的东西。它可能在某些编译器/标准库实现上正确执行。由于非数组指针的 delete[] 导致内存损坏,它可能在这里失败。

您可以获得硬核内存调试器(re:valgrind)来找出堆损坏的确切时刻。您甚至可能会明白为什么 iostream 对象会因此损坏。但它不会真正帮助任何人,因为它可能会因完全不同的原因在另一个系统上失败。事实上,仅引入内存调试器的行为可能会改变它失败的位置或时间的行为。

关于用未分配的内存块写入的 C++ 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6418949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com