在C 中,将单个值写入一个非初始化的指针

Is writing a single value into a uninitialised pointer in c++ acceptable?

本文关键字:一个 初始化 指针 单个值      更新时间:2023-10-16

这是否被认为是安全的?

int *a;
*a = 5;

或我应该总是做

int *a = new int[1];
*a = 5;

这样的代码是一个不确定的行为:它可能会崩溃(例如,如果您尝试在程序的空间外写入),否则它可能以非常奇怪的方式行为(例如,如果它指向另一个地方变量存储;找到一个错误将需要永远需要)。

以下是安全的(只要您仅在val还活着时使用指针):

int val;
int *a = &val;
*a = 1;

这起作用,因为a使用为val保留的空间(现在val等于1)。

在您的第二个示例中,new int[1]应该有效,因为您需要为1个整数保留空间。