将值赋给指针而不使用新的 根据我对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";   
}