Может кто-нибудь указать на проблему с этим кодом (для изменения размера динамического массива). Я использую 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;
}
Вы не используете информацию о длине для создания нового 'x'. Также попробуйте правильно отформатировать код, чтобы мы могли легче видеть, что происходит. – Matthias247
Всякий раз, когда вы думаете о «динамических массивах» при программировании на C++, ваша следующая мысль должна * всегда * быть ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). Использование стандартной библиотеки и ее классов и функций сделает вашу жизнь программистом на C++ * так * намного проще. –
Это домашнее задание? Если не использовать std :: vector. –