在C 中,将单个值写入一个非初始化的指针
Is writing a single value into a uninitialised pointer in c++ acceptable?
这是否被认为是安全的?
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个整数保留空间。
相关文章:
- 构造函数在退出函数时无法初始化一个参数
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- C++:将初始化的对象传递给另一个类的构造函数;需要不必要的构造函数吗?
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 'auto *x = new some_struct{};"是一个未初始化的变量?
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 初始化类中的指针数组,并在另一个类中检索它
- C++,每个循环初始化一个新的静态变量
- 初始化一个由 p 指向的新 INTSTK,它最多可以存储 m 个
- 如何初始化一个标准::字符串数组?
- 我们如何初始化一个C++中所有值为 0 的向量
- C++ 警告:在一个声明中将截断从双精度初始化为浮点数,但在另一个声明中则不初始化
- 从C++调用 Python 类方法,如果给定一个初始化的类作为 PyObject
- C++11使variadic构造函数了解一个初始化列表的初始化列表
- 静态变量已用另一个初始化
- 与可以一个从另一个初始化的类的循环依赖关系
- 另一个初始化静态 C++ 类成员