![](/img/trans.png)
[英]Exception thrown: read access violation. it was 0xFFFFFFFFFFFFFFFF
[英]EXCEPTION_ACCESS_VIOLATION (read from address 0xffffffffffffffff)
我想知道如何解釋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)
評論:它可能是一個未初始化的指針。
我找到:
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 調試器,這證明了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.