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
时,您不能再使用它。