【发布时间】:2018-08-27 07:53:42
【问题描述】:
这是我的代码:
#include<iostream>
#include<cstdlib>
using namespace std;
int main() {
int** arr=NULL;
int num=0;
cin >> num;
int* big=NULL;
arr = new int*[num];
for (int i = 0; i < num; i++) {
arr[i] = new int[5];
}
big = new int[num];
for (int i = 0; i < num; i++) {
for (int j = 0; j < 5; j++) {
while (1) {
cin >> arr[i][j];
if (arr[i][j] >= 0 && arr[i][j] < 100)
break;
}
}
}
for (int i = 0; i < 5; i++) {
big[i] = 0;
}
for (int i = 0; i < num; i++) {
for (int j = 0; j < 5; j++) {
if (big[i] < arr[i][j]) {
big[i] = arr[i][j];
}
}
}
for (int i = 0; i < num; i++) {
cout << "Case #" << i + 1 << ": " << big[i] << endl;
}
delete[]big;
for (int i = num-1; i>=0; i--) {
delete[]arr[i];
}
delete[]arr;
return 0;
}
当我运行此代码时,它说存在堆损坏错误(检测到堆损坏)。我认为这意味着我的代码中的“新”或“删除”部分存在一些错误,但我找不到它们。希望有人回答。谢谢。
【问题讨论】:
-
我可以毫无问题地在cpp.sh 编译您的代码。你用的是什么编译器?我们需要更多信息。还有什么是输入,输出应该是什么?
-
@YesThatIsMyName g++、clang 和 icc 正在编译这个(使用 -Wall)而没有警告。
-
一个好的现代 C++ 编码实践是避免
new和delete,并尽可能使用标准库,例如std::vector和unique_ptr. -
big = new int[num];for (int i = 0; i < 5; i++) { big[i] = 0;- 所以如果num小于 5,你就有一个错误。
标签: c++ heap-corruption