被释放的指针未分配(删除数组中的一个元素)

2023-11-29

我是 oop 的初学者,这是我的问题

int main(){
        int *p = new int[3];
        p[0] = 1;
        p[1] = 2;
        p[2] = 3;
        int* q = p;
        p++;  //here!
        delete p;
}

and

int main(){
        int *p = new int[3];
        p[0] = 1;
        p[1] = 2;
        p[2] = 3;
        int* q = p + 1;
        p++;  //here!
        delete p;
}

有错误:释放的指针未分配 但 和

int main(){
        int *p = new int[3];
        p[0] = 1;
        p[1] = 2;
        p[2] = 3;
        int* q = p + 1;
        delete p;
}

看起来不错! 我想删除这个数组中的一个元素。有人可以告诉我这个错误的原因吗?


内存是在连续的块中分配的,并且必须以相同的方式返回。最好假设您的内存块带有一个小前缀,分配器用它来确定它来自哪里以及它有多大。

另外,当你“new”一个数组时,你必须使用“delete[]”来释放它。

thing* thingArray = new thing[64];

...

delete [] thingArray;

如果您尝试主动管理元素数组,您可能需要研究std::向量反而。

#include <vector>

std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
// v.size() is now 3 (num elements)
v.erase(v.begin()); // remove the first integer.
// v now "looks" like { 20, 30 }
// v.size() is now 2, not 3.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

被释放的指针未分配(删除数组中的一个元素) 的相关文章

随机推荐