int *zahl = malloc(sizeof(int)*4);
我很困惑,因此我知道int是4位元組的大小,4 * 4 = 16. 但是,當我使用它時,printf(sizeof(zahl);
它會給我8. 我該如何解決?
uj5u.com熱心網友回復:
擴展上面的答案:如果您只有指標,您將無法發現分配的記憶體大小。
堆管理系統的內部(做 malloc 和 free 的東西)知道,但沒有標準的方法來詢問這些資訊。
Eric 指出了以下 (TY) 非標準擴展。
- windows https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/msize?view=msvc-170
- linux https://linux.die.net/man/3/malloc_usable_size
- mac https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/malloc_size.3.html#//apple_ref/doc/man/3/malloc_size
uj5u.com熱心網友回復:
sizeof( zahl )給出指標的大小(x64 = 8 位元組)。
標準 C 中沒有辦法找到從 malloc 分配的記憶體量。
但是這個答案決定了動態分配記憶體的大小
在流行平臺上給出了一些解決方案
uj5u.com熱心網友回復:
顯示 8 也是如此printf(sizeof(zahl)),因為它是整數指標的大小。
sizeof基本上回傳您傳入它的引數的變數或指標的大小,具體取決于它的資料型別。在您的情況下,您已將zahlsizeof 作為引數,因此它回傳了 sizeof zahl,它是一個整數指標。x64 編譯器中的任何指標的大小都是 8 位元組。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441808.html
