1樓:匿名使用者
這個程式是有問題的,dev-c++執行正常,而vs會提示棧損壞,明顯就能看出哪個ide質量更高了。
首先,這個程式崩潰和變數是否是私有是無關的,你可以改成public試試,是一樣的。
你需要徹底理解,物件,就是一段記憶體,對物件的資料成員操作(不管是公有的,直接操作;還是私有的,通過公有的成員函式操作)實質上都是將指定偏移的記憶體給修改了。
在你的程式裡,你在棧上建立了一個物件a,並用b指向了首地址,然而你在呼叫的時候,使用了(++b)這個使得b在使用前,自增了一個類a的物件大小的偏移,顯然已經是一個不正確的地址了,你呼叫函式,往不正確的地址開始的一個int的空間寫入2,那不就是錯誤的非法寫操作嗎。vs額外提供的棧的安全性檢查捕獲到了這個,於是就用崩潰的方式給你報錯了(因為棧損壞的錯誤是無法恢復的)。
不賦值不會掛的原因是,你只是進行的讀的操作,沒有寫。 但是因為你讀的已經是一個錯誤的記憶體空間了,自然裡面的數對你的程式來說就是一個隨機的值了。
最後一言以蔽之,把b前面的++去掉,對你寫的小程式來看,沒有任何意義,這個++
2樓:
++b訪問的是a後面的一段記憶體,非法地址,執行i = a;時對它有寫操作,所以就崩潰了。
a a[2];
a *b = a;
(++b)->disp(2);
改成這樣就不會了
3樓:
dev-c++執行正常
這個歷史選擇為什麼不選C,這個歷史選擇為什麼不選C
因為北方戰亂不斷,所以許多北方人大量湧入,這就形成了南北融合的過程,在北方文化的衝擊下,不能排斥就行成了慢慢融合的過程,商品的交易往往是最直接的,相互合作並不代表道路的發達 這題關鍵就在於一定距離範圍內的 合作。合作可以減少成本,增加利潤。所以本題不是簡單地突出遠距離販運的發達,所以不能選c 首先要...
c語言程式設計請問這個程式中clrscr為什麼有問題
你可能和糾結,為什麼clrscr 功能沒有用,編譯器還報錯,對不?呵呵 其實,有兩個問題 1 clrscr 是在標頭檔案conio.h下的函式,原型是void clrscr void 於是,你 好像懂了 便在你原有程式的基礎上加了一個 include 但是很不幸,編譯器依然報錯,甚至發出 clrsc...
為什么現在這個社會的女生會變,為什麼現在這個社會的女生會變?
真正的愛,是接受,不是忍受 是支援,不是支配 是慰問,不是質問。真正的愛,要道謝也要道歉 要體貼,也要體諒 要認錯,也好改錯。真正的愛,不是彼此凝視,而是共同沿著同一方向望去。也許,愛,不是尋找一個完美的人 而是,要學會用完美的眼光,欣賞一個不完美的人。牽了手,就不要,隨便說分手。或許,愛就是心甘情...