我最近提交了一個小程序,分配是有以下兩個功能和它內部的一個主要方法中:C:的內存狀態的數組聲明
/**
* Counts the number of bits it
* takes to represent an integer a
*/
int num_bits(int a)
{
int bitCount = 0;
while(a > 0)
{
bitCount++;
a = a >> 1; //shift to the right 1 bit
}
return bitCount;
}
/**
* Converts an integer into binary representation
* stored in an array
*/
void int2bin_array(int a, int *b)
{
//stopping point in search for bits
int upper_bound = num_bits(a);
int i;
for(i = 0; i < upper_bound; i++)
{
*(b+i) = (a >> i) & 1; //store the ith bit in b[i]
}
}
int main()
{
int numBits = num_bits(exponent);
int arr[numBits]; //<- QUESTION IS ABOUT THIS LINE
int2bin_array(exponent, arr);
//do some operations on array arr
}
當我的教練回來,他編寫的程序關於我上面標說,由於numBits
值不知道,直到運行時,初始化數組的大小numBits
是一個危險的操作,因爲編譯器將不知道多少內存分配給數組arr
該行的註釋。
我在想,如果有人能:
1)確認,這是一個危險的操作
2)解釋什麼是內存明智的打算時,我初始化這樣一個數組,編譯器如何知道什麼內存分配?有什麼辦法可以確定分配了多少內存?
任何輸入將不勝感激。
http://en.wikipedia.org/wiki/Variable-length_array – Mysticial 2012-02-23 02:33:51