memcpy(0, b_voltage, sizeof(b_voltage)); 为什么会报错../Core/Src/main.c(506): warning: #2748-D: null argument provided for parameter marked with attribute "nonnull"
时间: 2024-03-17 11:40:44 浏览: 93
在你的代码中,`memcpy` 函数的第一个参数是一个空指针 `0`,同时你的编译器可能开启了非空指针检查,因此编译器会发出警告信息,提示你在 `nonnull` 属性的参数中传递了一个空指针。
为了解决这个问题,你可以将第一个参数改为一个有效的地址,例如:
```c
memcpy(&some_variable, b_voltage, sizeof(b_voltage));
```
这里,`some_variable` 是一个有效的变量,你可以将 `b_voltage` 数组的值复制到这个变量中,从而避免了空指针的问题。
另外,你也可以使用 `memmove` 函数来完成相同的操作,它与 `memcpy` 函数类似,但能够处理重叠的内存区域。例如:
```c
memmove(some_buffer, b_voltage, sizeof(b_voltage));
```
这里,`some_buffer` 是一个有效的缓冲区,你可以将 `b_voltage` 数组的值复制到这个缓冲区中,而不用担心源和目的地内存区域的重叠问题。
相关问题
#0 0x1bbf5f1 in __interceptor_memcpy ../../../../libsanitizer/asan/asan_interceptors.cc:456 #1 0xdc36c05 in apache::thrift::transport::TBufferedTransport::readSlow(unsigned char*, unsigned int) (/data3/ken_group/
这是一个堆栈跟踪信息,指出在运行Thrift库时发生了错误,并且错误发生在TBufferedTransport::readSlow函数中。具体错误原因需要查看更多的堆栈跟踪信息和代码。在这个例子中,还可以看到堆栈跟踪信息中提到了asan_interceptors.cc文件,这意味着可能与ASAN(AddressSanitizer)相关的错误。可以通过调试或查看更多的日志来进一步确定错误原因和解决方法。
../src/Services/Public/public.c:776:9: note: include '<string.h>' or provide a declaration of 'memcpy'
This error message is indicating that the function `memcpy` is being used in the file `public.c` but the compiler cannot find a declaration for it.
To resolve this issue, you can either include the `string.h` library at the top of the file by adding `#include <string.h>` or provide a declaration for `memcpy` before it is used in the code.
Here's an example of how to provide a declaration for `memcpy`:
```c
void *memcpy(void *dest, const void *src, size_t n);
```
You can add this declaration before the function that uses `memcpy`.
阅读全文