基本上当我这样做时,32位系统会发生什么:
uint32_t test (void)
{
uint32_t myInt;
myInt = ((0xFFFFFFFF * 0xFFFFFFFF) % 256u );
return myInt;
}
Run Code Online (Sandbox Code Playgroud) char t = 'a';
char * p1 = &t;
char** p2 = &p1;
std::cout << p2 << " " << *p2 << " " << **p2 << '\n';
Run Code Online (Sandbox Code Playgroud)
我正在使用clang和-fsanitize =地址,它抱怨内存访问溢出变量并终止我的程序,但是当我单步执行gdb时,我可以看到是的,所有内容都已定义,它应该打印两个地址,后跟'a'.
如果我删除中间的"*p2"它运行正常,即它是打印一个指针导致我问题的半解引用指针.
我做了比C++更多的C编程,所以我仍然试图围绕引用和指针.我在Qt中遇到了这个问题:
class node : public QObject
{
Q_OBJECT
public:
explicit node(QObject *parent = 0);
explicit node(QObject *parent = 0, QGraphicsRectItem * obj = Q_NULLPTR);
explicit node(QObject *parent = 0, QGraphicsRectItem * obj = Q_NULLPTR, int val = 0);
}
private:
QGraphicsRectItem * rect;
int terrain;
Run Code Online (Sandbox Code Playgroud)
...
node::node(QObject *parent) : QObject(parent)
{
terrain = 0;
rect = Q_NULLPTR;
}
node::node(QObject *parent, QGraphicsRectItem *obj) : QObject(parent)
{
terrain = 0;
rect = obj;
}
node::node(QObject *parent, QGraphicsRectItem *obj, int val) : QObject(parent) …Run Code Online (Sandbox Code Playgroud)