【发布时间】:2012-02-23 02:32:46
【问题描述】:
我最近为一个任务提交了一个小程序,其中包含以下两个函数和一个 main 方法:
/**
* 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) 解释当我像这样初始化一个数组时内存发生了什么,编译器如何知道要分配什么内存?有没有办法确定分配了多少内存?
任何意见将不胜感激。
【问题讨论】:
标签: c memory-management