有人可以指出这段代码的问题(用于调整动态数组的大小)。我正在使用Visual Studio 2013来运行代码。它给出了运行时错误,即heap corruption detected after normal block (a number) at (memory address). CRT detected that the application wrote to the memory after the end of heap buffer
。
我将使用下面提到的技术而不是任何标准库函数或向量来调整数组的大小:
#include<iostream>
using namespace std;
int * rg(int *, int, int);
int main()
{
int len = 1;
int * x = new int[len];
int i = 0;
int y = 0;
while (getchar() != 'q')
{
cin >> y;
if (i == 0)
x[0] = y;
else
{
x = rg(x, len, y);
len++;
}
cout << len;
i++;
}
cout << endl;
for (int i = 0; i < len; i++)
{
cout << x[i] << endl;
}
}
int * rg(int*x, int len, int val)
{
int * temp = x;
x = new int[];
for (int i = 0; i < len; i++)
{
x[i] = temp[i];
}
x[len] = val;
delete[]temp;
return x;
}
答案 0 :(得分:3)
x = new int[];
作为标准C ++无效,不应该编译。
答案 1 :(得分:2)
您没有包含getchar
的库。在开头添加#include <cstdio>
。
第二件事是,在抓取第一个数字后,你不会增加len
,这会导致第二个输入覆盖第一个数字。最后一个输入在结尾处加倍。
第三。在分配内存时,编译器需要知道它必须分配多少。您需要在x = new int[]
。