我在代码库中发现了经典的新/删除不匹配错误,如下所示:
char *foo = new char[10];
// do something
delete foo; // instead of delete[] foo;
Run Code Online (Sandbox Code Playgroud)
这有多严重?它是否会导致内存泄漏或错误?有什么后果.我们有一些内存问题,但这似乎不足以解释我们所有的症状(堆损坏等)
编辑:清晰的额外问题
它是否只释放阵列的第一个成员?还是
会让系统失去对阵列的追踪?或
腐败记忆是某种方式?
事实证明,许多无辜的东西都是C++中未定义的行为.例如,一旦一个非空的指针已被delete"D 甚至在打印的是指针的值是未定义的行为.
现在内存泄漏肯定是坏事.但他们是什么类的情况 - 定义,未定义或其他类别的行为?
好吧,我用C++编译器发现了一些奇怪的东西.
我有一个不太复杂的代码重构,我不小心设法离开了没有返回语句的路径.我的错.另一方面,当我运行它并且该路径被击中时,这个编译和分段显然.
这是我的问题:这是一个编译器错误,还是不能保证C++编译器会在非void返回函数中强制需要return语句?
哦,并且要清楚,在这种情况下,这是一个不必要的声明,没有伴随的其他.没有任何东西,没有退出,没有中止.