線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1141
推到 Plurk!
推到 Facebook!

關於C++的堆疊(stack)問題

答題得分者是:pwipwi
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-21 14:07:08 IP:221.169.xxx.xxx 未訂閱
各位大大小弟有一個問題,找了好久,都找不到答案
void __fastcall TestFunctiom ()
{
int AA;
}
在C語言中變數AA的實體位置是位於程式的堆疊(STACK)區,等TestFunctiom執行時由程式自動分配記憶體位置,執行完畢則歸還 但是,如果是下面的情形,其記憶體的位置為何? 在Button1Click 內的變數 TestObj1 的實體位置為何? 是在程式的堆疊區(stack)嗎? TestObj1內的陣列(FTestInt)的實體記憶體位置為何? 一樣是在程式的堆疊區(stack)嗎? 在Button1Click 內的變數 TestObj2 的實體位置為何? 是在程式的堆疊區(stack)嗎? TestObj2內的陣列(FTestInt)的實體記憶體位置為何? 一樣是在程式的堆疊區(stack)嗎?
class TestObj
{
private:
  int FTestInt[100];
  int * __fastcall GetTestInt()
  { return FTestInt; };
public:
  __property int * TestInt = {read=GetTestInt };
};    void __fastcall TForm1::Button1Click(TObject *Sender)
{
TestObj TestObj1;
TestObj1.TestInt[0] = 0;
}    void __fastcall TForm1::Button2Click(TObject *Sender)
{
TestObj *TestObj2 = new TestObj;
TestObj2->TestInt[0] = 0;
delete TestObj2;
}
請各位大大為偶解惑一下... ========================= 大家一起快樂寫程式
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-21 21:23:06 IP:211.76.xxx.xxx 未訂閱
引言: 各位大大小弟有一個問題,找了好久,都找不到答案 但是,如果是下面的情形,其記憶體的位置為何? 在Button1Click 內的變數 TestObj1 的實體位置為何? 是在程式的堆疊區(stack)嗎? TestObj1內的陣列(FTestInt)的實體記憶體位置為何? 一樣是在程式的堆疊區(stack)嗎? 在Button1Click 內的變數 TestObj2 的實體位置為何? 是在程式的堆疊區(stack)嗎? TestObj2內的陣列(FTestInt)的實體記憶體位置為何? 一樣是在程式的堆疊區(stack)嗎?
class TestObj
{
private:
  int FTestInt[100];
  int * __fastcall GetTestInt()
  { return FTestInt; };
public:
  __property int * TestInt = {read=GetTestInt };
};    void __fastcall TForm1::Button1Click(TObject *Sender)
{
TestObj TestObj1;
TestObj1.TestInt[0] = 0;
}    void __fastcall TForm1::Button2Click(TObject *Sender)
{
TestObj *TestObj2 = new TestObj;
TestObj2->TestInt[0] = 0;
delete TestObj2;
}
請各位大大為偶解惑一下... ========================= 大家一起快樂寫程式
以下是我個人的猜測.... 1.Stack 2.Stack 3.TestObj2本身是在Stack 4.Heap
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-22 17:33:06 IP:221.169.xxx.xxx 未訂閱
謝謝pwipwi的回答,偶想想應該也是這樣.... 會這樣問只有一個原因,偶必須產生很多物件,而每個物件內都有一個struct,如下例
class A
{
private:
  struct AAA
  {
    int TestInt;
    char TestStr[100];
  }Ud;
public:  

  __property int TestInt = { read=Ud.TestInt , write=Ud.Test.Int };    };
偶擔心一旦產生過多,系統會出問題.... 但是又不想寫NEW,不為什麼...煩阿...new & delete 最重要的是不用動態產生話,偶可以向上面藍色這樣寫 如果用NEW的話,就不能像下面(紅色)這樣寫
class A
{
private:
  struct AAA
  {
    int TestInt;
    char TestStr[100];
  } *Ud;
public:  
  __fastcall AAA()
  { Ud = new struct AAA; };
  __fastcall ~AAA()
  { delete Ud ; };

  __property int TestInt = { read=Ud->TestInt , write=Ud.Test->Int };    };
不管怎麼樣,還是謝謝各位 ========================= 大家一起快樂寫程式
系統時間:2024-06-24 20:18:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!