Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将单个值写入c+中未初始化的指针+;可以接受吗?_C++ - Fatal编程技术网

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;