gpt4 book ai didi

c++ - 删除数组只是偶尔失败

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:49 28 4
gpt4 key购买 nike

我在学习C++中的指针,遇到了一个很奇怪的问题。我们的任务是为我们自己的类编写我们自己的 push_back 函数,它包含一个整数数组。

我有以下简单的功能:

void IntRow::push_back(int value){
int *elements_temp = new int[size+1];
for (int i = 0; i <= size; i++){
elements_temp[i] = elements[i];
}
elements_temp[size + 1] = value;
elements = new int[size+1];
for (int i = 0; i <= size+1; i++){
elements[i] = elements_temp[i];
}
delete [] elements_temp;
size++;
}

然而,这失败了,但仅在某些时候在线:delete [] elements_temp;

错误信息如下:

incorrect checksum for freed object - object was probably modified after being freed.

为什么会发生这种情况,为什么它只是有时发生?

附注:我真的必须释放 elements_temp 还是在函数存在后它会被释放?

最佳答案

elements_temp[size + 1] = value; 的行为未定义,因为您正在访问数组边界之外的元素。

这种未定义的行为表现为偶尔的程序崩溃。

是的,您需要调用 delete[]在你从 new[] 返回的指针上明确你自己. (出于兴趣,谁在 delete[] 上调用 elements?)

或者,使用 std::vector<int> .

关于c++ - 删除数组只是偶尔失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46827452/

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