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只能用一次。 我也遇到了這個問題,試了一通,發現把所有的轉曲 ctrl q 就可以正常儲存了 回答,出現這種情況有兩種原因 1 pdf確實損壞 2 pdf非標準或者版本太高 2,pdf非標準或者版本太高解決方法 1 雙擊開啟adobe ilustrator css5 2 步選擇點選 檔案 選單裡的 開啟 按扭,開... 你的win鍵卡住了,就是ctrl與alt之間那個,有些鍵盤左右有倆 換個鍵盤試試吧 或者是你電腦設定了什麼 求滿意謝謝 看看是不是你的驅動出問題了啊 不行下個驅動精靈檢查一下 我的鍵盤l就出現計算機鎖定,按r就出現執行 按e出現我的電腦,按m最小化,按u出現輔助工具,你的鍵盤windows那個鍵 c... 第一空,根據前文語境 大約每2600萬年發生一次 可知,此處強調生物大滅絕的 週期性 第二空,保守估計 搭配恰當,且處在由 即使 也 引導的讓步條件句中,與後文語境中的 至少 相對應.因此,本題答案為d選項 生物大滅絕是指大規模的叢集滅絕,生物滅絕又叫生物絕種。整科 整目甚至整綱的生物在很短的時間內...cdr匯出pdf檔案為什麼會出錯
為什麼我的電腦鍵盤會出錯,按M視窗最小化,按e,自動開啟我的電腦介面按l會出現使用者名稱登陸藍色介面
生物大滅絕為什麼反覆發生,為什麼會出現生物大滅絕的現象?