Re: [問題] 要抓出存放Array Size的記憶體位置

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2009/10/05 21:56), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《jerrypotato (我是湯姆貓 不是傑利薯)》之銘言: : 現在課堂上正在複習C++語法 : 順便介紹變數宣告時 電腦是如何實際的指派記憶體位置給那些被宣告的變數 : 其中有一題是這樣的:(只列出關鍵部份) : class A : { : int data; : } : int main() : { : A *arr = new A[17]; : //Some Commands...... : return 0; : } : 根據教授的說法,"17"這一個數字會實際存在於記憶體中, : 而且其位置位於arr之前的幾個byte, : 要我們定位出"17"這個數字,所佔據的記憶體位址。 : 我試過好幾個方法,可是最後都是失敗的, : 最後還用到超級暴力法: : int *intptr = (int *) &arr //強制取出arr的記憶體位址 : for (int k = 0; k < 50; k++ ) : cout << *(intptr - k) << endl //把arr位址之前的記憶體全部掃瞄過一遍 : 結果還是不能掃到17這個數字 囧 : 實在沒辦法,只好PO上版來請教各位強者, : 請問我要如何定位出"17"這個數字所佔據的記憶體位址呢? : 謝謝<(_ _)> 我不太肯定是不是真的有, 但你這裡的做法有一個問題. 你的 loop 每次是往前跳一個 int 的 size. 但那個 "17" 未必是在這些位置 你應該要: char * bytePtr = (byte*) & arr; for (int k = sizeof(int); k < 50; k++) { // 往前 scan 50 個 byte cout << *((int *) bytePtr -k) << endl; } 這樣才對吧? 這樣才是一個個 byte 往前找 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82

10/05 21:59, , 1F
我用Visual Studio的記憶體視窗去看 也看不到那個數字..
10/05 21:59, 1F
文章代碼(AID): #1AoViPW- (C_and_CPP)
文章代碼(AID): #1AoViPW- (C_and_CPP)