将值赋给指针而不使用新的 根据我对C++的基本知识,我假设下面的代码会有运行时错误。因为编译器没有为y指针分配任何空间,我应该添加y=newint
是我错了还是编译器隐式地为将值赋给指针而不使用新的 根据我对C++的基本知识,我假设下面的代码会有运行时错误。因为编译器没有为y指针分配任何空间,我应该添加y=newint,c++,pointers,memory-management,heap-memory,C++,Pointers,Memory Management,Heap Memory,是我错了还是编译器隐式地为y指针分配了空间?(我用Dev-C++4.9.9.2编译了我的代码。) #包括 #包括 使用名称空间std; int main(int argc,char*argv[]) { int*x; int*y; x=新整数; *x=42; 第4.1节规定: a的左值(3.10) 非函数、非数组类型T可以是 转换为右值。如果T是 不完整类型,一个 这种转换是必要的 格式不正确。如果 左值引用不是类型为的对象 并且不是类型的对象 从T派生,或如果对象是 未初始化的,一种 必须
y
指针分配了空间?(我用Dev-C++4.9.9.2编译了我的代码。)
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
int*x;
int*y;
x=新整数;
*x=42;
第4.1节规定:
a的左值(3.10)
非函数、非数组类型T可以是
转换为右值。如果T是
不完整类型,一个
这种转换是必要的
格式不正确。如果
左值引用不是类型为的对象
并且不是类型的对象
从T派生,或如果对象是
未初始化的,一种
必须进行此转换已
未定义的行为。如果T是
非类类型,右值的类型
是T的cv不合格版本。
否则,右值的类型为
T
未定义意味着任何事情都可能发生-没有保证
来自维基
没有为其分配任何地址的指针称为野生指针。任何尝试使用此类未初始化指针的行为都可能导致意外行为,原因可能是初始值不是有效地址,或者使用它可能会损坏程序的其他部分。其结果通常是分段错误、存储冲突或野生branch(如果用作函数指针或分支地址)
是我错了还是编译器隐式地为y指针分配了空间
它没有,并且这种赋值是未定义的行为。这意味着它可以工作并且在很长一段时间内不会引起任何问题,但会突然使应用程序崩溃。变量y实际上被分配了一些随机值,*y=13;
将13分配给某个随机内存地址,该地址可以是某个结构或堆栈的有效内存地址。如果you会将y初始化为NULL ptr(或0,NULL)最初int*y=nullptr;
,那么应用程序应该崩溃。这是未定义的行为。代码仍然有缺陷。它当然没有。这可能是未定义的行为,只是没有显示错误。@juanchopanza:代码的哪一部分?语句*y=13;
正在写入未初始化的内存。
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int* x;
int* y;
x = new int;
*x = 42;
cout << *x << "\n";
*y = 13;
cout << *y << "\n";
}