- 我的arduino代码在分配内存时出现了以下错误:

解决方案
将
res = malloc(sizeof(char) * len + 1);
改为
res = (char*)malloc(sizeof(char) * len + 1);
原因
- 指针的本质就是一个int数据变量,
- 对于void *,可以转换为任意类型指针。
- void* 不能用于赋值,因为没有记录一个值在内存中size的大小
// https://www.coder.work/article/1562140的例子
char* pChar;
void* pVoid;
pChar = (char*)pVoid; //OK in both C and C++。C++ 被设计为比 C 更类型安全,因此您不能(自动)转换为另 一种指针类型。(C++ is designed to be more type safe than C, therefore you cannot (automatically) convert from void* to another pointer type.)
pChar = pVoid; //OK in C, convertion is implicit
文章讨论了在Arduino编程中遇到的内存分配问题,指出在使用malloc时需要显式类型转换。由于void*不包含类型信息,所以在C++中不能直接赋值给特定类型的指针。解决方案是将void*转换为(char*)后再进行赋值,以确保类型安全。此问题涉及到C和C++对指针处理的差异。
2万+

被折叠的 条评论
为什么被折叠?



