我必须创建一个程序,使用'new'运算符在程序堆中创建动态数组。该程序为每个输入数据(cin)一次创建并填充其动态数组一(int)元素。
关键部分。
1。)程序必须使用“cin>>”数据输入一次接受整数,直到键盘上按下EOF(cntrl-z为Windows)。
2.)用户输入必须使用!cin.eof()&&amp ;; cin.good()测试是否按下了EOF键以及数据是否有效。 (有点对cin.good()部分感到困惑。)
3.)程序将创建一系列更长和更长的数组,以包含所有先前的元素和当前传入的元素。此外,程序将在完成当前版本后删除该阵列的先前版本。
4。)程序还测试每次使用new运算符后堆内存是否已耗尽。 (需要帮助)
我不断收到错误信息“HEAP CORRUPTION DETECTOR正常黑色(#146)”(视觉工作室)。有什么问题?
提前致谢!
以下是代码:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cassert>
using namespace std;
// main
int main() {
int size = 2;
int * array1 = new int[size];
int arrayInput;
int count = 0;
do {
if (array1 != NULL) {
cout << "Enter an integer (EOF to stop): " << endl;
cin >> arrayInput;
if (size < count) {
int * tempArray;
tempArray = new int[size * 2];
if (tempArray != NULL)
{
for (int i = 0; i < size; i++) {
array1[i] = tempArray[i];
}
delete[] array1;
array1 = tempArray;
size *= 2;
delete [] tempArray;
}
else
cout << "Insufficient Heap resource." << endl; // If we get here the Heap is out of space
}
if (!cin.eof()) {
array1[count++] = arrayInput;
}
}
else
cout << "Insufficient Heap resource." << endl; // If we get here the Heap is out of space
} while (!cin.eof());
for (int i = 0; i < count; i++) {
cout << array1[i] << endl;
}
}
答案 0 :(得分:1)
tempArray = new int[size * 2];
if (tempArray != NULL)
{
for (int i = 0; i < size; i++) {
array1[i] = tempArray[i];
}
您分配的新数组是旧数组的两倍。然后将新分配的数组的内容复制到现有数组中。新分配的数组包含随机垃圾,您刚刚用它来覆盖旧数组中现有的好数据。
这是一个明显的错误,但它无法解释崩溃。
delete[] array1;
array1 = tempArray;
size *= 2;
delete [] tempArray;
复制后,删除旧阵列。然后你也删除你刚刚分配的新数组。这闻起来像另一个臭虫,但它仍然不能解释崩溃。
if (!cin.eof()) {
array1[count++] = arrayInput;
}
现在,您可以在这里回答您自己的问题:当您继续写入指向您最近释放的内存的指针时会发生什么?
这是显示的代码中的多个错误。他们都必须修复。在此之后我还没有进一步观察。此代码可能还有其他问题。 rubber duck应该能够帮助您找到程序中任何剩余的错误。