gpt4 book ai didi

c++ - 尝试在 C++ 中删除具有空地址(非 NULL)的数组指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:25:11 24 4
gpt4 key购买 nike

我创建了一个包含像素强度值数组的类。复制此类时,我收到一个错误,好像我正在尝试删除一个未分配的数组。因为我很确定我没有将指针的指向地址设置为类的创建和复制之间的任何内容,所以指针的地址与 NULL 有什么不同对我来说是如此神秘。如何检查空的指向地址?

data_ == reinterpret_cast<const unsigned char *>("")

不起作用。

类:

template<class T> class PixelArray {
public:
int width_, height_;
int size_;
T* data_;

PixelArray() {
data_ = NULL;
};

~PixelArray() {
if (data_ != NULL)
delete[] data_;
data_ = NULL;
};

PixelArray(const PixelArray& other)
{
if (data_)
delete[] data_; // ERROR BEING THROWN HERE

data_ = NULL:
data_ = new T[other.size_];
size_ = other.size_;
width_ = other.width_;
height_ = other.height_;
std::copy(other.data_, other.data_ + other.size_, data_);
}
};

问题:

Status of the variable at the time of breaking

最佳答案

在复制构造函数中,成员变量还没有被初始化,没有什么可以delete[]

相反,成员变量 data_ 将具有一个不确定 值,并且它看起来是随机的并且很可能不等于空指针,这意味着您将拥有 < em>未定义的行为。

最简单的解决方案?不要使用未初始化的指针delete[]


复制构造函数就像任何其他构造函数一样,它在创建实例时被调用。不会调用其他构造函数进行复制构造,只会调用复制构造函数。

关于c++ - 尝试在 C++ 中删除具有空地址(非 NULL)的数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41098511/

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