动态分配内存并分配单个数组值


int main()
{
int *dizi = new int[3];
int *ptr = new int;
*dizi = 1;
*(dizi + 1) = 2;
*(dizi + 2) = 3;
ptr = (dizi + 2);
delete ptr;
for (int i = 0; i < 2; i++)
{
cout << *(dizi + i) << endl;
}
delete[] dizi;
}

我想返回dizi[2]值,但我不能,它只是崩溃了。我该怎么做,你能给我一个例子吗?

尝试删除ptr与尝试删除dizi[2]相同,因为您可以在注释部分中看到delete必须在new返回的地址中使用。程序的行为未定义。

您还存在内存泄漏,重新分配ptr时,分配给ptr的内存将无法访问。


如果要将dizi + 2辅助到ptr,则需要:

//...
int *ptr = new int;
*ptr = dizi[2]; // or *(dizi + 2);
std::cout << *ptr; // use it
delete ptr; // delete if after use
//...

另一方面,如果您打算将dizi + 2(或&dizi[2](分配给ptr,则不需要为ptr分配内存,您可以直接进行分配:

//...
int *ptr = dizi + 2;
std::cout << *ptr;
//...

请注意,在这种情况下,数组删除后,ptr变为悬空,当它指向dizi + 2时,您不能再使用它。


最新更新