代码之家  ›  专栏  ›  技术社区  ›  LOSnel

关于malloc()和全局变量[闭合]

c
  •  -1
  • LOSnel  · 技术社区  · 7 年前

    我想知道这个代码示例是什么意思。我如何确保我的结构“my\u struct”可以安全地分配到内存中?

    谢谢你的帮助。

    MyStructType_t my_struct;
    
    int main(void)
    {
        MyStructType_t *p;
        p = malloc (sizeof(MyStructType_t ));
        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 回复  |  直到 7 年前
        1
  •  2
  •   Neo    7 年前

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

    前两行 main 声明指针并在动态存储器中为其分配内存。

    第三行 副本 前两行中分配的内存内容 (在动态存储器中)分配到第一行中的内存(在静态存储器中)。

    我的结构 完成后。