gpt4 book ai didi

c++ - 了解删除 [] C++

转载 作者:行者123 更新时间:2023-11-30 02:22:11 24 4
gpt4 key购买 nike

首先让我说我已经在寻找答案,但我找不到任何可以向我解释为什么我遇到问题的答案。

我是一名学生,现在正在学习 C++

所以在告诉我不要以这种方式使用 C++ 之前,让我告诉你,这是为了学习目的和理解一些概念。

程序在最后一个语句处崩溃。删除 [] tempVector;我不明白为什么会发生这种情况,因为 delete[] vector;工作得很好。

错误:播放arr.exe已触发断点

请帮助我理解我做错了什么。

非常感谢。

class BetterArray
{
private:

int* vector;
int count;

public:

BetterArray(int value);
BetterArray(int* vec, int size);
~BetterArray();

void add(int value);

int* getArray();

};

BetterArray::BetterArray(int value)
{
count = 1;

vector = new int[1];
vector[0] = value;
}

void BetterArray::add(int value){

int* tempVector = new int[count + 1];

for (int i = 0; i < count; i++)
tempVector[i] = vector[i];

tempVector[count] = value;

count++;

delete[] vector;

vector = tempVector;

delete[] tempVector; // programa crahses here.
}

最佳答案

delete 崩溃通常是堆损坏的结果。当您将 tempVector 指针分配给 vector 时,两个指针都指向相同的内存位置。所以删除 tempVector 也会删除 vectorvector 现在指向未分配的内存。

现在假设您写入 vector,您正在写入未分配的内存,这将破坏堆。这之后发生的是未定义的行为,但如果堆管理器检测到损坏,它通常会崩溃。

关于c++ - 了解删除 [] C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47640567/

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