我是C ++的新手。我希望没有指向任何东西的两个指针将被检测为空指针。但是,这仅适用于其中之一。这些指针的物理地址有些不同-0xe00000001与0x0(此指针正确检测为空指针)。
我编写了以下代码段:
#include <iostream>
using namespace std;
struct TNode {
TNode* Parent; // Pointer to the parent node
TNode* Left; // Pointer to the left child node
TNode* Right; // Pointer to the right child node
int Key; // Some data
};
int main() {
TNode parent;
parent.Key = 2;
TNode first;
first.Key = 1;
first.Parent = &parent;
parent.Left = &first;
cout << first.Left << endl; // get 0xe00000001 here
cout << first.Right <<endl; // get 0x0
if (first.Right …Run Code Online (Sandbox Code Playgroud) 处理NULL指针时可以做到这一点
if(ptr != NULL){ ... }
or this
if(ptr != 0){ ... }
Run Code Online (Sandbox Code Playgroud)
是否有理由偏爱另一个C++?
以下使用seg-V崩溃:
// my code
int* ipt;
int bool set = false;
void Set(int* i) {
ASSERT(i);
ipt = i;
set = true;
}
int Get() {
return set ? *ipt : 0;
}
// code that I don't control.
struct S { int I, int J; }
int main() {
S* ip = NULL;
// code that, as a bug, forgets to set ip...
Set(&ip->J);
// gobs of code
return Get();
}
Run Code Online (Sandbox Code Playgroud)
这是因为虽然i它不是NULL仍然无效.如果调用代码从NULL指针获取数组索引操作的地址,则会发生同样的问题.
对此的一个解决方案是修剪低阶位: …
我不太明白为什么Python会自动将函数返回给我的任何0转换为None对象.我用几乎所有的常用语言进行编程,但我以前从未遇到过这种情况.我希望如果我在结果中设置0,我会从函数中得到0.
任何人都可以解释为什么Python这样做?
编辑:
为了提供更多信息,我们有一个C++类的包装器,返回值类型是一个void指针.因此,如果它返回一个值为0的整数,它会给我一个None类型.这对任何人都有意义吗?
我只是Python的新手,并试图找出我可能期望的无类型而不是返回值.
我正在测试这段代码,结果是程序在到达<< op第一个时崩溃cout(因为它打印出op =然后停止).
char *lo = 0, *op = 0, *ro = 0;
cout << "op = " << op << endl;
cout << "*op = " << *op << endl;
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:为什么会这样?
我知道,指针给我带来了很多问题..
问题本身就是一个明显的答案.无论如何,这是我的代码片段......
switch(cSet)...
case 8:{ //Special Characters
finalSet = special;
char* charSet = new char[special.size() + 1];
charSet[special.size()] = 0; //Append null terminator
memcpy(charSet, special.c_str(), special.size());
break;
}
case 9:{ //Alphnumeric and Special character
finalSet = all;
char* charSet = new char[all.size() + 1];
charSet[all.size()] = 0; //Append null terminator
memcpy(charSet, all.c_str(), all.size());
break;
}
...
Run Code Online (Sandbox Code Playgroud)
请注意,这finalSet是类型std::string.我需要将其保存为字符数组.在这个语句之后,我charSet在switch语句之外调用:
for(int i = 0; charSet; i++)
printf("%s", charSet[i]);
Run Code Online (Sandbox Code Playgroud)
现在,很明显switch语句是有条件的,因此可能并不总是声明变量.因此,Visual Studio 2012会抛出错误" charSet未定义".不过,我charSet总是会定义我的switch语句的结构,或者程序将在这种default情况下退出.
为了解决这个问题,我试图 …