繁体   English   中英

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

[英]Access violation when “resizing” array in C++

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

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
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM