此代码

#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() {
}

给我以下错误信息:

sketch_dec11f.cpp:在函数'void setup()'中:sketch_dec11f.cpp:14:7:错误:从'void *'到'unsigned int *'的无效转换

我究竟做错了什么?

(也尝试过使用malloc(),也没有用!)

===============>>#1 票数:2 已采纳

您绝对不想要alloca() 那是分配在函数堆栈上的分配,仅在调用期间有效。 它使您可以在函数返回时使用动态数组(在C ++中,可以使用RAII进行此操作,但在C语言中, alloca是唯一的方法)。

您只需要在分配中进行强制转换。 尝试i = (unsigned int *)malloc(StringLength() * sizeof(*i)) 注意sizeof(*i) 那是一个成员的大小: sizeof(i)是指针的大小,与里面的内容不太可能相关。

===============>>#2 票数:1

Malloc和alloca返回void *指针。 只是改变

i = alloca(StringLength() * sizeof(i));

i = (unsigned int *)alloca(StringLength() * sizeof(i));

===============>>#3 票数:1

我不确定alloca,但是malloc返回的void *和与C不同的C ++不支持从void *到任何其他指针类型的隐式转换。 这是C ++与C不同的众多领域之一。

===============>>#4 票数:1

转换来自alloca的返回指​​针:

i = (unsigned int *) alloca(StringLength() * sizeof(i));

===============>>#5 票数:1

与C语言不同,在C ++中,无效指针不能隐式转换为其他指针。因此,需要进行强制转换:

i = static_cast<unsigned int *>(alloca(StringLength() * sizeof(i)));

  ask by speendo translate from so

未解决问题?本站智能推荐: