我试图理解指针,但是无法增加数组的大小,我试图做的是制作一个比标准数组大一个的数组,复制那里的所有内容,然后删除旧的指针数组,创建一个正确大小的新指针数组,然后从该临时数组移回所有内容。出于某种原因,我不断收到“无法读取内存”的信息,我也不知道为什么。
#include <iostream>
int main()
{
int number;
int arraySize = 3;
bool full;
int *ptr = new int[arraySize] {0};
do
{
full = false;
std::cout << "Input a number please: ";
std::cin >> number;
getchar();
for (int i = 0; i < arraySize; i++)
{
if (ptr[i] == 0)
{
ptr[i] = number;
i = arraySize;
}
else if(arraySize -1 == i)
{
full = true;
}
}
if (full == true)
{
int *tempPtr = new int[arraySize+1];
for (int x = 0; x < arraySize; x++ )
{
tempPtr[x] = ptr[x];
}
delete[] ptr;
arraySize++;
int *ptr = new int[arraySize];
for (int x = 0; x < arraySize; x++)
{
ptr[x] = tempPtr[x];
}
ptr[arraySize] = number;
}
}while(number != -1);
for (int z = 0; z < arraySize; z++)
{
std::cout << ptr[z] << std::endl;
}
getchar();
return 0;
}
答案 0 :(得分:0)
int *ptr = new int[arraySize];
此ptr
与外部ptr
不同,因此超出范围时会泄漏。应该是
ptr = new int[arraySize];
此外,请不要忘记退出程序之前先delete[] ptr
。这是一个稍作修改的版本,更易于i.m.o阅读。
#include <iostream>
int main()
{
int number;
int arraySize = 3;
int *ptr = new int[arraySize] {0};
int i=0;
do
{
std::cout << "Input a number please: ";
std::cin >> number;
std::cin.ignore();
if(number==-1) break; // no need to increase array
if(i>=arraySize) {
// the array is full
int *tempPtr = new int[arraySize+1];
for (int x = 0; x < arraySize; ++x) tempPtr[x] = ptr[x];
delete[] ptr;
// just assign the address tempPtr is pointing at to ptr
ptr = tempPtr;
++arraySize;
}
// store the new number
ptr[i] = number;
++i;
} while(true);
for (int z = 0; z < i; z++)
{
std::cout << ptr[z] << std::endl;
}
delete[] ptr;
getchar();
return 0;
}
请注意,有一些标准容器(std :: vector等)比动态容器更有效地处理动态分配,因此您不必自己编写它。