我想知道如何解释0xffffffffffffffff
(在回溯中)
我知道:
从0
/ nullptr
阅读是无效的地址。
从0x58
读取,删除对象后,将导致访问冲突,因为我没有内存位置。
因此对于0xffffffffffffffff
,我知道/假设:
object* obj;
会在堆栈上创建object *类型的指针,值为0
/ nullptr
。object* obj = new object()
将在堆上创建对象,在obj
中存储指向它的指针,并使用000000000BD0ADA0
之类的有效地址 - 需要在某个时候用delete obj
删除。 0xffffffffffffffff
是二进制的全部1。问题:如何以0xffffffffffffffff
0xffffffffffffffff
?在我的具体案例中,就像这样:
CustomItem* name_item = new CustomItem (i, elems[i]);
CustomItem (int sort_val, MyObject *obj) : _sort_val (sort_val), _mobj(obj) { }
model->setItem (i, 0, name_item);
#0 Qt5Gui public: void cdecl QStandardItemModel::setItem(int,int,class QStandardItem * ptr64) ptr64 +0xd (ip 0x7fee721bcfd fp 0x168470)
答案 0 :(得分:0)
评论:这可能是一个未初始化的指针。
我发现:
Object* obj; // is 0
然而:
Object* obj1; // is 0
Object* obj2 = new Object(); // is 000000000BF6F100 (some valid address)
Object* obj3; // is 000000000BF6F100
结论:Object* obj;
不保证为0。
编译器或调试器可能会将未初始化的指针替换为0xffffffffffffffff
。显然只是在某些情况下,因为我无法在一个简单的例子中重现它。我希望有一些链接到一些c ++规范,编译器规范或者可能是visual studio调试器,这证明了这一点。