c - 关于 malloc() 和全局变量

标签 c

我想知道这个代码示例的含义。我如何确保我的名为“my_struct”的结构可以安全地分配在内存中?

感谢您的帮助。

MyStructType_t my_struct;

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

    [...]
}

我尝试了这段代码(因为编译器没有警告我),即使它没有意义,它似乎也解决了我的问题,即我在尝试解释时, my_struct 的一些字段被无缘无故地删除了。

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.
       [...]
    }
}

最佳答案

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

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

第三行将main前两行(动态存储中)分配的内存内容复制到第一行(静态存储中)分配的内存中贮存)。

内容本身未知,是垃圾,所以这段代码没有意义。它会起作用,但完成后 my_struct 中不会有任何有意义的内容。

关于c - 关于 malloc() 和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46608069/

相关文章:

c++ - OpenGL 三角形邻接索引

c - 在 C 中,如何写入特定的内存位置,例如视频内存 b800,在 DOS 中(真正的 DOS,MS DOS 6.22)

c - c 中出现段错误

c - codevision 中 AVR 的 C 语言代码中有什么无效?

c - 如何在 .bundle 文件中模拟 objdump --dwarf=decodedline?

c - 当我不想覆盖时我的 shell 实现

c - 我如何 robuSTLy 包含可能位于不同(未知)目录中的外部头文件?

c++ - 在 C/C++ 中打印所有 ASCII 值

c - 在 C 中打印 n x n 矩阵的所有可能路径

c - 当添加小数字时,程序给出了巨大的数字