2013-10-22 224 views
-4

我有下面的代碼的大小:列表INT指針

#include <iostream> 

using namespace std; 

int main() 
{ 
    int* T = new int; 

    T[0] = 1; 
    T[1] = 10; 
    T[2] = 100; 
    T[3] = 1000; 
    T[4] = 10000; 
    T[5] = 100000; 
    T[6] = 1000000; 
    T[7] = 10000000; 
    T[8] = 100000000; 
    T[9] = 1000000000; 

    cout << sizeof(T)/sizeof(int) << "<->" << T[3] << endl; 

    return 0; 
} 

,結果給我1這是不正確。我如何獲得正確數量的元素?

回答

4

int* T = new int;爲一個int分配空間。您可以通過T[0]*T訪問此int

T[1]無效,因爲您只爲一個整數分配空間。

因此,您已行使未定義的行爲。

你可以做int *T = new int[10];,它將爲堆中的10個整數或int T[10];分配空間,這將爲堆棧上的10個整數分配空間。

+0

謝謝!這個迴應非常清楚! – LXSoft

1

你宣佈Tint *T,所以如果sizeof(T)/sizeof(int)計算結果爲1,這意味着int *int都採取了相同的字節數您的系統上(假設你不截斷由於整數當然分工, - 如果你有一個奇怪的系統,其中sizeof(int*)6,而sizeof(int)4,例如,這仍然會給你1)。

如果更改:

int* T = new int; 

到:

int T[10]; 

,你似乎期望它會工作,你也想解決所有這些非法寫入未分配的內存的問題。

更改爲int *T = new int[10];將解決你的記憶寫的問題,但仍然sizeof(T)/sizeof(int)將評估對1你,因爲T仍然是一個int *,而不是一個數組。