我在局部变量的内存分配方面遇到一个问题。 当数据数组(data1,dat2,data3,data4)被声明为本地时,这里是代码https://ideone.com/3O9522的链接。
unsigned char *PutData1[2];
unsigned char *PutData2[2];
void call_func1(unsigned char x, unsigned char *Test1, unsigned char *Test2)
{
PutData1[x] = Test1;
PutData2[x] = Test2;
if (x== 0)
{
printf("Init PutData1: %02x %02x %02x %02x \n", PutData1[0][0],
PutData1[0][1], PutData2[0][0], PutData2[0][1]);
}
if (x== 1)
{
printf("PutData2: %02x %02x %02x %02x \n", PutData1[1][0], PutData1[1]
[1],PutData2[1][0], PutData2[1][1] );
printf("Afer PutData1: %02x %02x %02x %02x \n", PutData1[0][0], PutData1[0]
[1], PutData2[0][0], PutData2[0][1]);
}
}
void Func1(void)
{
unsigned char Data1[2] = { 0xAB, 0xCD };
unsigned char Data2[2] = { 0xDE, 0xAE };
call_func1(0, &Data1[0], &Data2[0]);
}
void Func2(void)
{
unsigned char Data3[2] = { 0x44, 0x33 };
unsigned char Data4[2] = { 0x11, 0x55 };
call_func1(1,&Data3[0], &Data4[0]);
}
int main(void) {
Func1 ();
Func2 ();
return 0;
}
调用call_func1(1,& Data3 [0],& Data4 [0])后,Data1和Data2数组的值被覆盖
以下是代码https://ideone.com/I00OZj
的链接当数据数组声明为全局时。在调用call_func1(1,& Data3 [0],& Data4 [0])之后,保留Data1和Data2数组的值。任何人都可以解释这种行为。
答案 0 :(得分:1)
您的代码存储指向$( "#target" ).keypress(function( event ) {
// Enter has keycode 13
if ( event.which == 13 ) {
event.preventDefault();
}
});
中声明的本地数组Data1
和Data2
的指针。它将这些指针存储在Func1
和PutData1[0]
中。 PutData2[0]
完成后,这些本地数组Func1
和Data1
将被销毁。 Data2
和PutData1[0]
指针变得晃来晃去。任何通过这些悬空指针访问任何东西的尝试都会导致未定义的行为。
在致电PutData2[0]
call_func1
时,您尝试通过悬挂的Func2
和PutData1[0]
指针访问数据。行为未定义。这就是它的全部内容。