#include <iostream>
#include <algorithm>
bool wayToSort(int i, int j) { return i > j; }
bool wayToSortAlt(int i, int j) { return i < j; }
int main()
{
using namespace std;
int size = 5;
int *myArray = new int[size] { 0 };
int option = 0;
cout << "How many numbers do you want to enter?: ";
cin >> size;
cout << "How do you want to sort? ( [1] Greatest [2] Lowest ): ";
cin >> option;
cout << "----\n";
// Get number inputs
for (int count = 0; count < size; ++count)
{
cout << "Enter a number: ";
cin >> myArray[count];
}
cout << "----\nSorted:\n----\n";
// Sort for highest numbers
if (option == 1)
sort(myArray, myArray + size, wayToSort);
else
sort(myArray, myArray + size, wayToSortAlt);
// Print each number
for (int count = 0; count < size; ++count)
{
cout << myArray[count] << "\n";
}
delete[] myArray; // Clean up
myArray = nullptr; //
return 0;
}
我在Visual Community 2013中运行此代码,如果我输入一个高数字,如10,我会收到堆损坏错误。根据我的阅读,当您尝试写入未分配的内存地址时会发生堆损坏错误,但我不明白两件事:
1)为什么动态数组会发生这种情况,并且 2)为什么只有在我尝试输入更大的数字时才会发生错误。
答案 0 :(得分:1)
卢克 您已经定义了数组的大小。所以它不是动态数组。它是一个指向大小为5的数组的指针,因此最多只能存储5个整数。
所以你基本上已经分配了足够的空间来容纳5个int。这意味着如果您尝试存储超过5个,例如索引为5的第6个int,则您尝试访问不属于您的内存。 例如,你有:
[] [] [] [] []
1 2 3 4 5
很好
[] [] [] [] []
1 2 3 4 5 6 7 8 ...
导致堆损坏。
我可以建议std :: vector吗?