C++ 将单个值写入c+中未初始化的指针+;可以接受吗?
这样安全吗C++ 将单个值写入c+中未初始化的指针+;可以接受吗?,c++,C++,这样安全吗 int *a; *a = 5; 还是我应该一直这么做 int *a = new int[1]; *a = 5; 这样的代码是一种未定义的行为:它可能会崩溃(例如,如果您试图在程序空间之外编写代码),或者它的行为可能非常奇怪(例如,如果它指向存储另一个变量的位置,则将永远找不到错误) 以下是安全的(只要您仅在val仍处于活动状态时使用指针): 这是可行的,因为a使用为val保留的空间(现在val等于1) 在您的第二个示例中,我认为新的int[1]应该可以工作,因为您需要为1整数保留
int *a;
*a = 5;
还是我应该一直这么做
int *a = new int[1];
*a = 5;
这样的代码是一种未定义的行为:它可能会崩溃(例如,如果您试图在程序空间之外编写代码),或者它的行为可能非常奇怪(例如,如果它指向存储另一个变量的位置,则将永远找不到错误) 以下是安全的(只要您仅在
val
仍处于活动状态时使用指针):
这是可行的,因为a
使用为val
保留的空间(现在val
等于1
)
在您的第二个示例中,我认为新的int[1]应该可以工作,因为您需要为1整数保留空间。这两个都是错误的。回答标题中的问题:否,它应该立即崩溃。@mvp通过未初始化的指针写入内存是未定义的行为,任何情况都可能发生,崩溃不一定发生。你可以简单地破坏内存而不是崩溃。我认为C++使用了0的索引,所以声明了1个int的内存空间,我应该使用新的int(0);谢谢你的邀请clarification@RichuShajiAbraham
new int[0]
无效。无法分配包含0个元素的数组。但是,如果只需要一个元素,则不需要分配数组,newint
本身就足够了。但在99%的情况下,使用new
分配单个int
是一种过分的做法。
int val;
int *a = &val;
*a = 1;