所以我正在尝试创建一个函数,将成员数组“调整大小”为一个作为参数传递的新大小。通过“调整大小”,我的意思是它应该将成员数组设置为具有新大小的新数组,复制旧数组中的元素,然后释放与旧数组关联的内存。这是我到目前为止所做的:
void MemoryTest::resize(unsigned int new_size) {
if (size == new_size)
return;
int* oldPtr = elements;
elements = new int[new_size + 1];
for (int i = 0; i < (new_size < size) ? new_size : size; i++)
elements[i] = oldPtr[i];
elements[new_size] = '\0';
if (size > new_size)
size = new_size;
delete[] oldPtr; // Deallocate old elements array
}
元素是一个私有成员int *,初始化为NULL。
但是,当它开始for循环时,程序会在为元素[i] = oldPtr [i]行提供访问冲突之前挂起一段时间。有人请纠正我,如果我错了(我可能是),但我的理解是oldPtr应该是指向与元素相同的初始点的指针。然后,我将元素设置为等于一个新数组,所以这两个现在指向两个不同的东西。然后我遍历元素,将每个项目设置为等于旧数组中的对应项目。
此外,虽然我通常会使用向量来避免这种情况,但我正在尝试更熟悉C ++中的指针和内存分配。
提前致谢!
答案 0 :(得分:3)
for (int i = 0; i < (new_size < size) ? new_size : size; i++)
应该阅读
for (int i = 0; (i < (new_size < size)) ? new_size : size; i++)
因此,for (int i = 0; i < ((new_size < size) ? new_size : size); i++)
应该更正您的代码。