未初始化的数组和初始化的数组在栈上是怎么分配的
未初始化的数组和初始化的数组在栈上是如何分配的程序如下:void test1(){char data[300]{0}}void test2(
未初始化的数组和初始化的数组在栈上是如何分配的
程序如下:
void test1()
{
char data[300]={0};
}
void test2()
{
char data[300];
data[299] = 50;
lcdAdjustBacklight(data[299]);//防止data被优化掉
}
芯片的内存只剩200Bytes,当运行test1的时候,芯片会死掉,因为栈溢出了。但是运行test2的时候就没问题,所以是不是未初始化的数组是不是不在栈上分配空间的?
[解决办法]我也推测一下
char data[300]={0};
可能执行的操作是一个memcpy,第一个元素是0,其它的是默认值,长度是300。
char data[300];
data[299] = 50;
lcdAdjustBacklight(data[299]);
lcdAdjustBacklight有可能因为优化还是传值50,这时候data其实不存在。
单片机编程?在仿真器ide里,看看汇编可能更容易确定问题。