C++ 像这样使用新的操作员对吗?
该行是否用于分配地址C++ 像这样使用新的操作员对吗?,c++,new-operator,C++,New Operator,该行是否用于分配地址nir=0?0也是内存的一部分,对吗?我们为什么不把nir=NULL nir = 0; 我是否可以这样做并更改值,以便现在可以将输出设置为8?毕竟,我已经删除了*nir值。nir=0 这会将指针设置为NULL。0和NULL在此上下文中是相同的 *nir=8 这是错误的,因为nir不是有效的指针。它的崩溃并不奇怪 cout此代码段是错误的 *nir = 8; 通常程序会崩溃 至于线路 *nir=8; //**can i do like this and change
nir=0
?0也是内存的一部分,对吗?我们为什么不把nir=NULL
nir = 0;
我是否可以这样做并更改值,以便现在可以将输出设置为8
?毕竟,我已经删除了*nir
值。nir=0代码>
这会将指针设置为NULL。0和NULL在此上下文中是相同的
*nir=8
这是错误的,因为nir不是有效的指针。它的崩溃并不奇怪
cout此代码段是错误的
*nir = 8;
通常程序会崩溃
至于线路
*nir=8; //**can i do like this and change the value, so that the output can be 8 now?
那么它就相当于
nir = 0;
< C++ >空定义为0或(长)0等。
根据C++标准
1空指针常量是带值的整数文本(2.14.2)
零或std::nullptr\t类型的PR值。可以使用空指针常量
转换为指针类型;结果是空指针值
属于该类型,可与对象的所有其他值区分开来
指针或函数指针类型
您标记C++,所以我建议使用NulLPTR而不是0 /null
nir=nullptr代码>
问题
<>代码> 0(基本上是int类型)也用作C++中的空指针文字。这种混乱会导致歧义和错误。
解决方案
使用nullptr关键字而不是0来指示空指针值
您故意犯下的错误的简短分类:
nir = NULL;
因为程序员热衷于避免无用的工作,所以上面的(delete NULL)被定义为no op
delete nir;
前两行是无用的,因为与任何其他函数相比,nir
不再使用,并且每个标准的main
返回0,除非它显式返回0
nir = 0;
return 0;
nir=0
使nir
指向零。。这相当于将其设置为null
。在这之后,您不能执行*nir=8
,因为nir
没有分配用于保存8的内存。您使用delete
删除它nir=0
和nir=NULL
是完全一样的。@Jeffrey,这取决于NULL
被定义为什么<代码> null 在C++中实际上不存在。好的,显然,这些标题的部分内容实际上是在C++标准(TIL;未检查)中指定的。在这种情况下,NULL
在您的上下文中的含义还有待观察:)因为我已经使用了int*nir=new int,这是否意味着要产生输出8,我必须用其他名称分配另一个动态内存?@rockik我不确定您的意思。您必须再次分配,但可以使用相同的指针。您可以再次重用指针。
int main()
{
int* nir = new int; // allocating dynamic memory
*nir = 7; // assigning value
cout << *nir << endl;
delete nir; // deleting
nir = 0; // **is this line for assigning the address nir=0?
// 0 is also part of memory right? Why didn't we put NULL?
*nir = 8; // **can i do like this and change the value,
// so that the output can be 8 now?
cout << *nir << endl;
delete nir;
nir = 0;
return 0;
}