我首先要说的是,使用智能指针,你永远不必担心这一点.
以下代码有什么问题?
Foo * p = new Foo;
// (use p)
delete p;
p = NULL;
Run Code Online (Sandbox Code Playgroud)
这是由另一个问题的回答和评论引发的.Neil Butterworth的一条评论产生了一些赞成:
在删除后将指针设置为NULL不是C++中的通用优良做法.有时候它是一件好事,有时它是毫无意义的,可以隐藏错误.
有很多情况下它无济于事.但根据我的经验,它不会伤害.有人开导我.
正如comp.lang.c常见问题所述,有一些架构,其中空指针不是所有位零.所以问题是实际检查以下结构:
void* p = get_some_pointer();
if (!p)
return;
Run Code Online (Sandbox Code Playgroud)
我是否p与机器相关的空指针进行比较或者我是否p与算术零进行比较?
我应该写
void* p = get_some_pointer();
if (NULL == p)
return;
Run Code Online (Sandbox Code Playgroud)
相反,为这样的架构做好准备还是仅仅是我的偏执?
常量0用作C和C++中的空指针.但随着问题"指向一个特定的固定地址 "似乎有一些可能使用分配固定地址.在任何系统中,对于访问地址0的任何低级任务,是否有任何可能的需求?
如果有,那怎么解决0为空指针而全部?
如果没有,是什么让它确定没有这种需要?
如果我写
int zero = 0;
void *p1 = (void *)0;
void *p2 = (void *)(int)0;
void *p3 = (void *)(0 /*no-op, but does it affect the next zero?*/, 0);
void *p4 = (void *)zero; // For reference, this is a pointer to address zero
void *p5 = 0; // For reference, this is a null pointer
void *p6 = NULL; // For reference, this is a null pointer
void *p7 = nullptr; // For reference, this is a null pointer …Run Code Online (Sandbox Code Playgroud) 我理解NULLC/C++中常量的用途,我理解它需要在内部以某种方式表示.
我的问题是:对于C/C++中的对象,0地址是否是无效的内存位置有一些根本原因吗?或者我们理论上是因为这次预订而"浪费"一个字节的内存?
如何为指针分配特定的内存地址?
微控制器中的特殊功能寄存器如AVR m128具有固定地址,AVR GCC在io.h头文件中定义了SFR,但我想自己处理它.
这是在不使用运算符的情况下执行加法的求和逻辑,+如下所示,
int add(int a, int b) {
const char *c=0;
return &(&c[a])[b];
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以让我理解如何return声明如何添加a&b.
我正在研究给定进程的内存布局.我注意到每个进程的起始内存位置不是0.在这个网站上,TEXT从0x08048000开始.一个原因可以是使用NULL指针区分地址.我只是想知道是否还有其他好的理由?谢谢.
我正在尝试将一个巨大的项目从C++翻译成Delphi,我正在完成翻译.我留下的一件事是'\ 0'怪物.
if (*asmcmd=='\0' || *asmcmd==';')
Run Code Online (Sandbox Code Playgroud)
其中asmcmd是char*.
我知道\ 0标志着C++中数组类型的结束,但我需要知道它是一个字节.是0吗?
换句话说,下面的代码是否等同于C++行?
if(asmcmd^=0) or (asmcmd^=';') then ...
Run Code Online (Sandbox Code Playgroud)
其中asmcmd是PAnsiChar.
你不需要知道Delphi来回答我的问题,但是告诉我\ 0为字节.那也行.:)
我正在尝试使用 GCC,试图说服它假设代码的某些部分无法访问,以便趁机进行优化。我的一项实验给了我一些奇怪的代码。这是来源:
#include <iostream>
#define UNREACHABLE {char* null=0; *null=0; return {};}
double test(double x)
{
if(x==-1) return -1;
else if(x==1) return 1;
UNREACHABLE;
}
int main()
{
std::cout << "Enter a number. Only +/- 1 is supported, otherwise I dunno what'll happen: ";
double x;
std::cin >> x;
std::cout << "Here's what I got: " << test(x) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我是这样编译的:
g++ -std=c++11 test.cpp -O3 -march=native -S -masm=intel -Wall -Wextra
Run Code Online (Sandbox Code Playgroud)
函数的代码test如下所示:
_Z4testd:
.LFB1397:
.cfi_startproc
fld QWORD PTR [esp+4] …Run Code Online (Sandbox Code Playgroud)