【发布时间】:2017-08-19 04:42:53
【问题描述】:
我正在尝试解决我正在实现动态数组的网络教程(未标记)的问题。但是,它在两个地方失败了:
- 我尝试在函数
ResizeDynamicArray(...)中删除动态数组 -
它正在输出不正确的数据。我希望看到:
10 20 30 40 50 10 30 40 50 10 30 50...但我得到了这个:
8723216 8716480 701955994 201375930 10 8723216 701955994 201375930 10 8723216 701955994 10
解决方案的要求是:
- 使用 pointer to pointer 而不是 reference to pointer(顺便说一句,我已经成功实现了 reference to pointer 解决方案,但我正在尝试找出指向指针的指针解决方案)
- 不使用
malloc/free - 不使用
vectors - 必须使用如图所示的声明
有人可以建议我做错了什么吗?
int* CreateDynamicArray(int capacity, int &size);
void DeleteDynamicArray(int* dynamicArray, int &size);
void InsertElement(int* dynamicArray, int element, int &size, int &capacity);
void DeleteElement(int* dynamicArray, int elementIndex, int &size);
void ResizeDynamicArray(int** dynamicArray, int newCapacity);
void PrintArray(int *ptrArray, int capacity);
#include <iostream>
int main()
{
int size = 0;
int capacity = 0;
int* ptrArray = CreateDynamicArray(capacity, size);
InsertElement(ptrArray, 10, size, capacity);
InsertElement(ptrArray, 20, size, capacity);
InsertElement(ptrArray, 30, size, capacity);
InsertElement(ptrArray, 40, size, capacity);
InsertElement(ptrArray, 50, size, capacity);
PrintArray(ptrArray, size);
DeleteElement(ptrArray, 1, size);
PrintArray(ptrArray, size);
DeleteElement(ptrArray, 2, size);
PrintArray(ptrArray, size);
DeleteDynamicArray(ptrArray, size);
ptrArray = nullptr;
return 0;
}
int* CreateDynamicArray(int capacity, int &size)
{
size = 0;
return new int[capacity];
}
void DeleteDynamicArray(int* dynamicArray, int &size)
{
if (dynamicArray != nullptr) {
delete[] dynamicArray;
dynamicArray = nullptr;
}
size = 0;
}
void InsertElement(int* dynamicArray, int element, int &size, int &capacity)
{
if (size > capacity)
capacity += 2;
else
capacity += 1;
ResizeDynamicArray(&dynamicArray, capacity);
dynamicArray[size] = element;
size++;
}
void DeleteElement(int* dynamicArray, int elementIndex, int &size)
{
for(int i = elementIndex + 1; i < size; i++)
dynamicArray[i - 1] = dynamicArray[i];
size--;
}
void ResizeDynamicArray(int** dynamicArray, int newCapacity)
{
int *newArray = new int[newCapacity];
for(int i = 0; i < newCapacity; i++) {
newArray[i] = (*dynamicArray)[i];
}
// if (*dynamicArray != nullptr) {
// delete [] *dynamicArray;
// }
*dynamicArray = newArray;
}
void PrintArray(int *dynamicArray, int size)
{
for (int i = 0; i < size; i++) {
std::cout << dynamicArray[i] << " ";
}
std::cout << std::endl;
}
【问题讨论】:
标签: c++ pointers dynamic-memory-allocation pointer-to-pointer