gpt4 book ai didi

c++ - 在 C++ 中删除时间数组

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:01 25 4
gpt4 key购买 nike

我正在使用我得到的一本书中的动态内存。据我所知,每次我们创建一个变量时,我们都需要删除它,并将指针设置为空,这样我们就没有悬空指针

我创建了一个程序,将用户的值存储在 [5] 的动态数组中,每当用户添加更多值时,我都会“扩展”该数组。扩展时,我使用了一个临时的新数组,这让我在尝试删除它时遇到了困难。为什么会这样?

size_t arraySize(5), index(0);

int inputvalue(0);
int *ptemporal(nullptr);

int *pvalues = new int[arraySize];

for (;;){

cout << "Enter value or 0 to end: ";
cin >> inputvalue; //enter value

// exit loop if 0
if (!inputvalue) //if 0 break
break;

pvalues[index++] = inputvalue; //store values on pivalores

if (index == arraySize){ //if limit reached create space

cout << "Limit reached. Creating space...";

arraySize += 5; //5 new memory blocks

ptemporal = new int[arraySize]; //temporal value holder.

for (size_t i = 0; i < arraySize - 5; i++) //xfer values to temporal
ptemporal[i] = pvalues[i];

delete[] pvalues; // delete values to
pvalues = ptemporal; // assigning the same addres to pvalues.

**delete[] ptemporal; //causes a problem if I use the delete. if i comment the program works just fine.**

ptemporal = nullptr;
}


}
return 0;
}

**两个星号只是为了表明问题是否发生。

最佳答案

您的问题是您在将指针复制到 pvalues 后立即删除 ptemporal:

pvalues = ptemporal; // assigning the same addres to pvalues.

delete[] ptemporal; //causes a problem if I use the delete. if i commentt the program works just fine.**

换句话说,你删除了刚刚创建的内存!于是下次展开vector时,又尝试删除,导致double free错误。调试器可以帮助解决此类错误,因此您可以在程序执行时观察变量值。

// start
ptemporal = nullptr;
pvalues = /* location A */;


// first expansion
ptemporal = /* location B */;
// copy values from location A to B
delete[] pvales; /* location A */
pvalues = ptemporal; /* location B! */
delete[] ptemporal; /* location B */
ptemporal = nullptr;


// second expansion
ptemporal = /* location C */;
// copy values from location B to C, should segfault

// then you delete pvalues (aka location B) again!
// this results in a double free error
delete[] pvales; /* location B */

要解决此问题,只需删除行 delete[] ptemporal;

关于c++ - 在 C++ 中删除时间数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27336594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com