好吧,目前我正在編寫一個內核,爲了我的簡歷。在寫我的記憶管理單元時,我碰到了一堵磚牆。字符數組指針和從整數轉換(存儲器地址)
int address = (int)malloc(sizeof(Test))
consoleWriteString("Variable Address:\n");
consoleWriteInteger(address);
char* f = (void*)address;
consoleWriteString("\nVariable Address:\n");
consoleWriteInteger((int)&f); // Should print off the same as above
邏輯上兩者的輸出應該是相同的。某處出了問題,但是。因爲我的輸出如下。
Variable Address: 47167
Variable Address: 1065908
經過長時間的測試和調試,我終於投入並決定要求堆棧溢出。另外,如果您發現任何語法錯誤,請忽略它們順便說一下,這全是在C中,並且所有函數都是自定義的,包括malloc,但是我已經確定錯誤不在於該函數或其他任何事實。我相信這只是我愚蠢的指針和投射,但當我錯過了超級簡單的事情時,不要嘲笑我。
感謝亞勒
分配指向整數的指針並使用強制類型沉默你的叫喊編譯器?這是通向災難的道路。爲什麼不使用'void * address'或'char * address'?如果原因是沒有'consoleWritePointer',那就寫一個! – Jens
感謝您的信息,對於一個consoleWritePointer我將如何繼續寫這個?只需將它轉換爲十六進制的地址,然後從那裏打印? – robbert229
如果您已經有了一個符合標準C的printf,請使用'%p'說明符指針;如果不是,則將指針值轉換爲無符號整數值並打印(或使用聯合,粘貼到ptr中並讀取無符號值)。 – Jens