C++ 中 "resizing" 数组时的访问冲突

Access violation when "resizing" array in C++

所以我正在尝试创建一个函数,该函数 "resizes" 一个新大小的成员数组作为参数传递。 "resize" 的意思是它应该将成员数组设置为具有新大小的新数组,从旧数组复制元素,然后释放与旧数组关联的内存。这是我目前所拥有的:

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] = '[=11=]';

    if (size > new_size)
        size = new_size;

    delete[] oldPtr; // Deallocate old elements array
}

elements 是一个初始化为 NULL 的私有成员 int*。

但是,当它开始 for 循环时,程序会在为 elements[i] = oldPtr[i] 行给出访问冲突之前挂起一段时间。如果我错了(我可能错了),请有人纠正我,但我的理解是 oldPtr 应该是指向与元素相同的初始点的指针。然后,我将元素设置为一个新数组,所以这两个现在指向两个不同的东西。然后我遍历元素,将每个项目设置为等于旧数组中的对应项。

另外,虽然我通常会使用向量来避免这种情况,但我正在尝试更加熟悉 C++ 中的指针和内存分配。

提前致谢!

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++) 应该更正您的代码。