在C ++中“调整大小”数组时的访问冲突

时间:2015-01-26 05:24:26

标签: c++ arrays pointers access-violation

所以我正在尝试创建一个函数,将成员数组“调整大小”为一个作为参数传递的新大小。通过“调整大小”,我的意思是它应该将成员数组设置为具有新大小的新数组,复制旧数组中的元素,然后释放与旧数组关联的内存。这是我到目前为止所做的:

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 ++中的指针和内存分配。

提前致谢!

1 个答案:

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