关于malloc()和全局变量

时间:2017-10-06 14:28:58

标签: c

我想知道这段代码的含义是什么。我如何确定我的结构“my_struct”可以安全地分配到内存中?

感谢您的帮助。

MyStructType_t my_struct;

int main(void)
{
    MyStructType_t *p;
    p = malloc (sizeof(MyStructType_t ));
    my_struct= *p;

    [...]
}

我尝试这个代码(因为编译器没有警告我),即使它没有任何意义,它似乎解决了我的问题,我有一些my_struct字段,我试图解释时没有任何理由删除。< / p>

int main(void)
{
    // my main struct have many fields which are initialized
    my_struct.flag1 = 1;
    my_struct.flag2 = 2;
    memset(my_struct.buffer, 0, 10);
   [..]
}

void timer_callback( void )
{
    // Here i try to parse my buffer to get data from UART
    if(my_struct.buffer[0] == 2)
    {
       // we are ok
       // Then I exectute random code to write in eeprom values from the  buffer
       EEPROM_write(buffer[1]); ...

       // If I check the value of flag1, the value has changed to 0.
       [...]
    }
}

1 个答案:

答案 0 :(得分:2)

第一行在静态存储中声明变量my_struct

main的前两行声明了一个指针,并在动态存储中为它分配内存。

第三行将<{1}}(动态存储中)前两行中分配的内存内容复制到第一行(静态存储器)中分配的内存中。

内容本身是未知的并且是垃圾,因此这段代码毫无意义。它会起作用,但main完成时没有任何意义。