[英]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.