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

ivo*_*ory 2 c++ memory pointers

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

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

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

得到了错误:被释放的指针没有被分配但是和

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

好像很好!我想删除此数组中的一个元素.有人能告诉我这个bug的原因吗?

kfs*_*one 6

内存在连续的块中分配,必须以相同的方式返回.最好假设你的内存块带有一个小前缀,分配器用它来确定它的来源和大小.

此外,当您"新"一个数组时,必须使用"delete []"来释放它.

thing* thingArray = new thing[64];

...

delete [] thingArray;
Run Code Online (Sandbox Code Playgroud)

如果您尝试主动管理元素数组,则可能需要调查std :: vector.

#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.
Run Code Online (Sandbox Code Playgroud)