如果我写了类似
的内容,则在哪个部分分配内存
1. int *ptr;
*ptr = 22;
2. int *ptr = new int(22);
我理解的是当我们使用关键字new时,内存被保留到Heap中,并且返回保留的内存地址。
但是,如果我们没有使用关键字new,会发生什么?哪里有内存分配?
两个语法是否相同?如果否,这两个语句之间的确切区别是什么?
答案 0 :(得分:1)
您可以按如下方式重新编写代码示例:
第一
int * ptr;
*ptr = 22;
第二
int * ptr;
ptr = new int; //the only difference
*ptr = 22;
第二个会发生什么:
int * ptr;
表示能够存储int变量地址的create变量。现在变量未初始化,因此它存储垃圾。如果你将垃圾解释为指针,它可以指向任何地方(它可以是0,或0xabcdef11,或0x31323334,或者字面上任何一个留在以前使用的非清除内存中的任何内容)ptr = new int;
表示“分配能够保存int的内存区域并将其地址存储在ptr变量中”。从这一行开始,ptr指向特定的内存*ptr = 22;
表示将值22放入ptr。在第一个示例中,您创建变量,但不要初始化它。 ptr
包含垃圾,但您要求将其解释为地址并将22存储到此地址。会发生什么:
这就是为什么总是建议立即初始化指针:
int * ptr = NULL; //or better "nullptr" starting from C++11
尝试存储值*ptr = 22;
至少会明确地使程序崩溃。