我有一個類,ClassA,用new和delete的方式申請就會報寫非法記憶體,直接定義變數就沒問題,而且就是在解構式出提示
First chance exception at $0042766F. Exception class $C0000005 with message 'access violation at 0x0042766f: write of address 0x73300b44'. Process CounterText_test.exe (11356)
在表單的FormCreate事件下寫下面的代碼,也沒有執行類相關的操作以及其它的任何代碼,純就是定義和釋放變數
用下面的方式會:
ClasseA* PA = new ClassA();
delete PA;
用下面的方式就沒事:
ClassA A;
哪位大神幫忙分析一下是怎么回事?
我有用其它的類試了一下,不會呀
uj5u.com熱心網友回復:
開發環境:Win7 XE6uj5u.com熱心網友回復:
你這個ClassA的代碼呢?uj5u.com熱心網友回復:
比較復雜,所以就是貼出來,但理論上講兩種代碼方式應該沒什么太大的區別呀,就是申請個類,一個是手動通過delete釋放,一個是區域變數自動釋放,我試了都是會進解構式的呀uj5u.com熱心網友回復:
你是不是在delete了ClassA物件以后還在使用這個物件?uj5u.com熱心網友回復:
找到問題點了,但不知道為什么我在ClassA中使用到std::string,只要把這個變數去掉就行了,試過了和這個變數用沒用沒有關系,只要定義了就不行
uj5u.com熱心網友回復:
奇怪,只要用到std庫的東西就會出現這個問題uj5u.com熱心網友回復:
沒有呀,工程中的其它代碼的注釋掉了,只有new和delete了
uj5u.com熱心網友回復:
從出錯資訊看,為越界寫。而堆疊上的物件不出例外,堆上的出,
寫堆疊上記憶體一般不報錯,寫堆上記憶體,如果該記憶體是別的程式擁有的話,就肯定報錯了.
uj5u.com熱心網友回復:
http://blog.csdn.net/z397164725/article/details/11561751看上去像如上面所述的問題,但是我以前也是在Dll中輸出stl呀,只是以前是用2007編譯的,且是直接輸出類的public成員,現在為了封裝性好一點把這些引數做成private,多了Get和Set函式來讀寫而已呀
好像知道問題,但還是沒有找到根源,還是很模糊呀,有高手分析下嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/114469.html
標籤:基礎類
上一篇:Python爬取某寶商品資料案例:100頁的價格、購買人數等資料
下一篇:opencv車牌識別
