这段代码

#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/

10-11 19:42