У меня проблема с массивом, размер которого я хочу изменить. Вот мой код:
int main ()
{
// Build an application here
int length = 0;
int size = 0;
int input;
bool endAdding = false;
cout << "Please enter the length of the new array : ";
cin >> length;
int* oPtrDynamicArray = CreateDynamicArray (length, size);
do
{
cout << "Add an element (0 to quit) : " << endl;
cin >> input;
cout << endl << endl;
if (input == 0){
endAdding = true;
}
else
{
InsertElement(oPtrDynamicArray, input, size, length);
}
cout << "The array contains : " << endl;
for (int i = 0; i < size; i++)
{
cout << i << ": [" << oPtrDynamicArray[i] << "]" << endl;
}
} while (!endAdding);
DeleteDynamicArray (oPtrDynamicArray, size);
}
int *CreateDynamicArray (int capacity, int &size)
{
size = 0;
return new int[capacity];
}
void DeleteDynamicArray (int *dynamicArray, int &size)
{
delete[] dynamicArray;
dynamicArray = nullptr;
size = 0;
}
void InsertElement (int *dynamicArray, int element, int &size, int capacity)
{
if (capacity <= size)
{
ResizeDynamicArray (&dynamicArray, size+1);
}
dynamicArray[size] = element;
size++;
}
void ResizeDynamicArray (int **dynamicArray, int newCapacity)
{
int ** newArray = new int*[newCapacity];
for (int i = 0; i < newCapacity; i++)
{
newArray[i] = dynamicArray[i];
}
*dynamicArray = *newArray;
delete[] newArray;
newArray = nullptr;
}
Проблема в том, что массив передается в мою функцию «InsertElement», а затем в мой «ResizeDynamicArray» только в случае, если емкость <= размер, но массив, переданный в первое выражение, передается с хорошими значениями, но с анормальные указатели в массиве. </p>
Пример:
Для массива 3 у меня есть:
array [0] = 1 -> адрес 0x0004e300, содержащий значение 1
массив [1] = 2 -> адрес 0x00000003, содержащий ???
array [2] = 3 -> адрес 0x008ffb24, содержащий значение 2
Я действительно не понимаю, было бы здорово, если бы кто-то мог объяснить мне мою ошибку: /.
К вашему сведению, мне не нужны векторы, это упражнение для динамических массивов, поэтому мне нужны динамические массивы.
Спасибо за вашу помощь!