free釋放指標為什麼會出錯 求大牛解答

2022-12-20 05:31:19 字數 4017 閱讀 1858

1樓:匿名使用者

因為hanzi數祖未加結束符,所以sprintf時,hanhex的長度就未知了,可能越界了。

free時應該是根據malloc時分配的空間大小來free。可能會報錯。

另外,編譯器報的錯應該不是free,而是在前面sprintf時就越界了。

所謂free不行了,應該是根本就沒走到free.

其實,c裡能用陣列儘量用陣列。

2樓:匿名使用者

在strtointex函式呼叫之後加一行hanhex = hanhex;

3樓:匿名使用者

#include

#include

#include

#pragma comment(lib, "shlwapi.lib")

using namespace std;

//例如輸入621172314f60,會得到"我愛你";

int main()

hanzi[j]=0; //加結束符

int unicode;

char *hanhex;

hanhex = (char *)malloc(sizeof(char)*len+2);

if(null==hanhex)

sprintf(hanhex,"%s%s",hex,hanzi);

wcout<

free(hanhex);

hanhex = null;

}system("pause");

return 0;}

free指標後再給指標賦值,為什麼不報錯?

4樓:匿名使用者

你釋放的是指標所指向的內容。指標本身不會被釋放。

例如free(p);

p=null;

都是合法的。

但是如果你要訪問*p則會出錯

向被free掉的區域拷貝資料,其行為是未定義的。也就是說有可能正確也有可能錯誤。你將程式release釋出一下,多試幾臺機子,估計就會出錯了。

5樓:

指標被free掉之後只是指標指向的那一部分空間被釋放掉了,而指標本身就是一種指標變數,除非程式執行結束或其生存期結束了才消失!!!因此只要程式還在執行,該指標就可以再賦值!!!

free()函式釋放指標之後,為何還能輸出指標指向的內容?

6樓:篤俠

因為釋放指標,只是將指標所指的記憶體空間交還給系統,而指標變數的內容(即剛釋放的記憶體地址)併為改變,所以還能輸出。但此時的指標一般稱之為「野指標」,是很危險的。

所以,一般要求釋放指標後,緊接著將其置為空:

free(p);

p=null;

7樓:

你編譯器的問題吧,我這裡 printf("p=%s\n",p) ; 沒有輸出的。

// 不用對 malloc 返回的指標強制轉換?

char *p = (char*)malloc(100);

8樓:匿名使用者

p指標還存在,只是所指的內容隨機改變了。

c++中,free函式為什麼會報錯?

9樓:匿名使用者

c++ 中應當使用new和delete 來分配、銷燬堆記憶體。如果使用new建立 則必須使用delete銷燬。

當然也可以使用malloc/free 來做。部分編譯器會對多次delete或者free 報錯,但是對於gcc而言:free和delete的對錯誤物件使用是會被接受的(這麼做的原因是由於 編譯器不知道指標指向的到底是什麼,也不知道某些已編譯的二進位制**中是否返回了一個指向堆空間的指標)。

編譯期不報告錯誤,但不代表這就是對的,使用cppcheck會嘗試檢測這種錯誤。

所有的錯誤,雖然編譯器不會智慧到告訴你怎麼修改成絕對正確的,但是它的錯誤資訊也不是沒用的。很多時候看錯誤資訊就知道你錯在**了。free相關的錯誤可能有上百種吧,你只說報錯,我也不是神來著……

10樓:匿名使用者

如果是編譯錯誤,則表明沒有包括標頭檔案cstdlib如果是執行錯誤,則表示free函式引數的指標值有錯誤,主要如下:

1、指向目標並不是可以釋放的空間

2、指向目標已經釋放過了,現在重複釋放

3、指標值為0

4、不是原來動態分配空間的首地址

具體情況還得看看**才行

11樓:匿名使用者

free已經釋放的記憶體必然會報錯

c語言free釋放記憶體後為什麼指標裡的值不變?竟然還可以輸出

12樓:

沒毛病啊,釋放後系統或程式暫時沒有使用這段記憶體地址。

13樓:

看來你並未弄清楚「釋放」的意思。釋放是說把「原來指標指向的記憶體空間交還給系統」,由系統重新支配——因為用malloc分配後那部分記憶體就由你的**支配而系統支配不了了。那麼free後,儘管交還了系統,但還在系統沒有重新使用這塊記憶體時,它裡面的資料沒有改變,你當然可以讀出來——因為記憶體中的資料無論有效或無效,都要等到下一次寫入才能改變,否則是永久保留的!

如果兩個指標都指向同一記憶體,用free釋放其中的一個指標後,另一個指標還能引用這個記憶體裡的資料嗎???

14樓:魔群領袖

free的實質是將這段記憶體標記為可再分配,但是裡面的資料沒有被清空,所以如果你用另一個指標再次呼叫還能夠識別出剛剛的資料,但存在很大的危險性,建議釋放時2個指標都指向null

15樓:匿名使用者

可能能用,可能不能用,你要知道free釋放了記憶體塊之後,原指標值肯定會出錯,但是c允許讀取非法記憶體,可能存在你能繼續訪問的現象(我遇過),不過,最好不要讓這種情況發生,畢竟指標沒操縱好,會使你的程式變得極為脆弱。

16樓:匿名使用者

不能用了,而且這個沒釋放的指標不能在free了,直接等於個null就行了。

17樓:匿名使用者

不能,那是個野指標了,不能使用!

18樓:流川祭

不能,另一個指標變成了野指標。

c語言指標釋放問題,free相關

19樓:

雖然這樣你可以編譯通過,但是不能這樣使用。

free後p指向的記憶體是釋放狀態。雖然這個指標仍指向這個記憶體,但是因為其被釋放,很快會被其它malloc再分配到。值就會丟失,就是說記憶體不可靠了。

在使用free後,一定要對p進行設定為null,或0以表示這個指標不再是有效的。要使用需要再申請記憶體。

20樓:

亂七八糟,你思路已經混亂啦,若這是練功,可以稱為走火入魔了

21樓:匿名使用者

p被釋放了,不能再用了。再用需要重新申請空間

22樓:匿名使用者

什麼意思=。=我的理解是 int型別的指標是系統自己分配的 為什麼還要自己申請記憶體空間喃 不懂

對 null 指標連續 free多次會出錯嗎?為什麼?

23樓:

理論上對空指標free多次無錯,free就是讓此指標所指向的動態分配區標誌為可用,即讓系統從新標識(由系統完成),可參見free原始碼。

一般free後,立即將指標置為空,防止野指標出現,而在使用該指標時加上null判斷則可避免出錯。

24樓:匿名使用者

對同一塊記憶體只能一次

25樓:點趣生活

free只能用一次。

cdr匯出pdf檔案為什麼會出錯

我也遇到了這個問題,試了一通,發現把所有的轉曲 ctrl q 就可以正常儲存了 回答,出現這種情況有兩種原因 1 pdf確實損壞 2 pdf非標準或者版本太高 2,pdf非標準或者版本太高解決方法 1 雙擊開啟adobe ilustrator css5 2 步選擇點選 檔案 選單裡的 開啟 按扭,開...

為什麼我的電腦鍵盤會出錯,按M視窗最小化,按e,自動開啟我的電腦介面按l會出現使用者名稱登陸藍色介面

你的win鍵卡住了,就是ctrl與alt之間那個,有些鍵盤左右有倆 換個鍵盤試試吧 或者是你電腦設定了什麼 求滿意謝謝 看看是不是你的驅動出問題了啊 不行下個驅動精靈檢查一下 我的鍵盤l就出現計算機鎖定,按r就出現執行 按e出現我的電腦,按m最小化,按u出現輔助工具,你的鍵盤windows那個鍵 c...

生物大滅絕為什麼反覆發生,為什麼會出現生物大滅絕的現象?

第一空,根據前文語境 大約每2600萬年發生一次 可知,此處強調生物大滅絕的 週期性 第二空,保守估計 搭配恰當,且處在由 即使 也 引導的讓步條件句中,與後文語境中的 至少 相對應.因此,本題答案為d選項 生物大滅絕是指大規模的叢集滅絕,生物滅絕又叫生物絕種。整科 整目甚至整綱的生物在很短的時間內...