c - 无法将 NULL 分配给指针

标签 c cortex-m

我有一个奇怪的问题,我无法用对指针的 N​​ULL 赋值来解释。这是我的测试结构:

typedef struct
{
    uint8_t *buffer_pntr;
    uint8_t size;
    uint8_t some_other_stuff;
}my_struct_t;

void my_function (my_struct_t *handler)
{
    memset(&handler,0,sizeof(handler);
    handler->buffer_pntr=NULL;
}

void main(void)
{
   my_struct_t test;
   my_function(&test);
}

我想调用 my_function 将我的结构设置为已知状态,因为我在 main 中声明我的结构,因此它变为局部变量状态未知。问题是分配 NULL 会导致系统崩溃(cortex-m4 上的硬故障),我也不确定在带有指针的结构上使用 memset 是否是一个好习惯。从 my_function 中删除 NULL 赋值并在 my_function 外部使用 test.buffer_pntr=NULL 可以解决问题。

最佳答案

问题出在这里:

memset(&handler,0,sizeof(handler));

我假设您想要将结构归零,但是 handler 是一个指针,所以当您说 &handler 时,您正在获取指向该指针的指针并将其归零。你做的如此有效

handler = NULL;

然后取消引用指针导致了问题。如果你想将你需要做的结构归零

memset(handler,0,sizeof(*handler));

那么,当然不用单独将里面的指针置为NULL了。

关于c - 无法将 NULL 分配给指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56312201/

相关文章:

连接不断失败,C 语言中出现错误 10049

c - 如何在具有动态字符串的函数中使用 malloc 并且不在末尾添加符号

c - 如何使用 GCC(在 Windows 上)正确包含 libcurl?

c - 使用函数对 C 中的字符串数组进行排序

c - 函数指针问题

c++ - 如何在ARM Cortex-M芯片上使用STL?

c - 通过 SPI 写入和读取闪存

Objective-C 代码到 C 代码

stm32 JTAG 引脚使用

c - 如何将变量分配给c中的绝对地址?