这段代码
#include "alloca.h"
String str = "abc";
unsigned int *i;
void setup() {
Serial.begin(9600);
i = alloca(StringLength() * sizeof(i));
unsigned int j[StringLength() * sizeof(i)];
}
int StringLength() {
return str.length();
}
void loop() {
}
给我以下错误信息:
我究竟做错了什么?
(还尝试了malloc(),也没有用!)
最佳答案
您绝对不想要alloca()
。这是分配在函数堆栈上的分配,仅在调用期间有效。它使您可以在函数返回时使用动态数组(在C++中,您可以使用RAII进行此操作,但是在C alloca
中是唯一的方法)。
您只需要在分配中进行强制转换。尝试i = (unsigned int *)malloc(StringLength() * sizeof(*i))
。注意sizeof(*i)
。这就是一个成员的大小:sizeof(i)
是指针的大小,与内部内容无关。
关于c++ - 使用alloca分配内存时转换无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8467009/