的代碼是從C代碼寫在下面解釋這個和平的代碼的含義: -任何人都可以從C
int main(){
char* time = (char *)malloc(10240 * sizeof(char));
scanf("%s",time);
return 0;
}
的代碼是從C代碼寫在下面解釋這個和平的代碼的含義: -任何人都可以從C
int main(){
char* time = (char *)malloc(10240 * sizeof(char));
scanf("%s",time);
return 0;
}
錯誤:
因爲在範圍內沒有原型malloc
的編譯器將結果(類型void*
)解釋爲類型int
。
然後它將該值轉換爲char*
並將生成的(無意義的)值分配給time
。
然後,仍然使用無意義的值,它試圖存儲一個讀取值並將其解釋爲來自標準輸入的整數。
然後它退出而不做任何事情。特別是它不使用讀取或釋放內存(可能)更早分配的值。
它首先使用malloc函數從堆中動態保留內存,然後它正在掃描一個字符串。請注意格式fo%s的轉換說明符:與它有關的參數是一個指針(不是例如time [0])。
不要忘記在完成工作後內存應該是空閒的
syntax: free (time);
char* time = (char *)malloc(10240 * sizeof(char));
在這裏,你使用malloc()
分配的內存塊10240 * sizeof(char)
你。 sizeof(char)
等於4個字節,所以你分配的內存10240 * 4 = 40960
塊作爲int
默認情況下,你有沒有指定的範圍內(視爲void*
)任何原型malloc()
然後你施放的內存空間爲char *
和有*time
指向分配給你的內存中的第一個塊。
scanf("%s",time);
在這一行,你嘗試存儲在time
從scanf()
解讀爲整數輸入一個值。你的格式說明符在這裏是錯誤的。
然後程序終止,但沒有釋放你分配給它的內存,也沒有對你用scanf()
進行的任何操作做任何事情。
我們不是「解釋我在互聯網上找到的一些代碼,或者是由不願意解釋的朋友給出的網站」。 – Olaf
這段代碼有很多問題 - 「sizeof(char)」是多餘的,不應該強制轉換malloc的結果,永遠不會釋放內存,不會檢查scanf中的返回代碼,代碼容易受到緩衝區溢出的影響,你缺少包含stdio.h和stdlib.h。代碼沒有任何意義 - 它讀取輸入然後退出。 –