void show(int* x){
printf("%d",x[3]);
}
int main(){
int* ptr;
ptr = new int[9]();
delete [] ptr;
printf("%d %d\n", ptr[7], *(ptr+7));
show(ptr);
return 0;
}
-8
A
回答
8
为什么你认为它不起作用?你分配9个整数,然后删除它们。这工作得很好。
问题是你然后访问那些被删除的整数。一旦你做了什么是无关紧要的 - 你在不确定的行为土地。它可能会显示旧的价值,它可能会崩溃或宇宙可能开始收缩。
+0
你做了我的一天。 –
+0
我希望取悦;) –
4
您正在调用未定义的行为通过访问已删除的动态分配数组的元素。这里没有“没有工作”,因为什么都可以发生。 ptr
指向与delete
之前相同的内存地址,并且当您尝试访问它时没有什么可以说明的位置。
2
指针在delete[]
后没有失效,但指向的堆内存被释放,因此它不再被信任。这种类型的代码通常会在并行系统中引起头痛。
您可以通过删除后立即归零指针避免这种情况:
delete[] ptr;
ptr = 0;
相关问题
- 1. UIScrollView删除不能正常工作
- 2. 级联删除不能正常工作
- 3. 软删除不能正常工作
- 4. 删除按钮不能正常工作
- 5. C++擦除 - 删除成语不能正常工作?
- 6. 删除[]功能是不是在C++中正常工作
- 7. 删除功能无法正常工作
- 8. 删除功能无法正常工作
- 9. NSManagedObject删除工作不正常
- 10. 正在删除的数据不能正常工作
- 11. 删除功能在角度上不能正常工作?
- 12. 删除功能不能正常工作angularjs
- 13. Python的链表中删除功能不能正常工作
- 14. SQL Server合并功能 - 删除并输出删除不能正常工作
- 15. c#!=操作员不能正常工作
- 16. GACUTIL不能正常工作
- 17. C++不能正常工作,但c正在eclipse kepler中工作
- 18. removeFromSuperview不能正常工作
- 19. AssociationOverrides不能正常工作
- 20. FileObserver不能正常工作
- 21. 缓存清除不能正常工作
- 22. 清除JTextArea不能正常工作
- 23. 敲除“绑定”不能正常工作
- 24. 除()和Intersect()不能正常工作 - LINQ
- 25. 清除浮子不能正常工作
- 26. System.out.println不能正常工作
- 27. addClass()不能正常工作
- 28. removeOverlay:overlay不能正常工作
- 29. ODP.NET不能正常工作
- 30. OS.REMOVE不能正常工作
考虑提供更多的信息和问题 –
也“不工作”的意思是,你仍然可以输出的价值?这可能只是未定义行为的一种情况。 –
未定义的行为未定义。 –