此代码

#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

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

2回复

内存分配 - Arduino

我是这个低级别的新手。 我正在学习arduino。 我目前正在使用Arduino Mega 2560,在我们的课程中我们正在练习内存管理。 我是电脑中的内存管理专家,但不知怎的,我在arduino中遇到了疯狂的问题。 例如: arduino有8192B,我试图用uint_16溢出它
1回复

将ino sketch转换为C ++类,无效使用非静态成员函数

我正在尝试将可精细编译的.ino草图转换为C ++类,其工作代码为: 我尝试进行以下转换: .H文件: 和C文件: 我得到的错误是: 应该标记为静态吗?
3回复

我不了解内存分配和strcpy [重复]

这个问题已经在这里有了答案 : 4个月前关闭。 无界外错误 (8个答案) 超出范围访问数组不会出错,为什么? (17个答
2回复

如何最小化嵌入式平台上的内存分配?

如何在C ++中最小化动态内存分配? 我正在为Arduino Mega写一些草图,有时它挂了,我怀疑它正遭受内存碎片的困扰。 但是,我不清楚何时分配变量。 如果我有一个带有do_stuff方法的类,例如: 我实例化MyController一次,然后多次执行do_stuff(
3回复

我是否需要为构造函数的char指针分配内存?

我有一个Arduino代码的构造函数,如下所示: 我的问题是:我是否需要分配一个char缓冲区而不是仅仅依赖于传递的字符串指针? 我不是在字符串上操作(除了缩短它)。 我似乎还没有遇到任何问题,但我想验证。 这是针对arduino的,但对C和C ++的响应也会受到欢迎。
2回复

从char到const char的转换无效*

提前抱歉,我认为这将是一个非常简单的问题,但我已经坚持了几个小时,我无法根据我在这里发现的东西找出解决方法在谷歌上。 我有一个arduino连接到GPS和收音机,我正试图将GPS信号广播到我的收音机。 我现在要做的是将GPS中的NMEA句子转换为变量“text”,但我对此错误感到困惑,我
6回复

向c *添加从const char *到char *的无效转换”

我在一个名为Arduino的WiServer.h的文件中具有以下功能。 现在的问题是,我需要将一个int值(setting1)连接到char* URL参数,例如下面的示例。 我收到一个错误: 从const char *到char *的无效转换 我如何解决它?
1回复

Arduino从'char'到'char *'的转换无效

这真的给了我很多时间; 这个简单的逻辑。 我会解释事情的进展情况以及我现在想要实现的目标。 我有一个ESP8266模块,用于在运行Mosquitto MQTT Server的服务器上订阅主题“switch”。 从具有MQTT客户端的任何设备,我能够向该主题发布消息(交换机)并使用
1回复

在加载时分配/保留具有已知地址的AVR内存以适合Progspace

我正在尝试保留一些sram字节,在加载时必须知道地址,以便可以将其装入PROGSPACE。 直到现在我通过将地址设置为(0x1F6)在arduino nano板上进行棘手的分配测试了我的代码,然后在程序上执行了 确保它不会在堆中被覆盖...代码可以正常工作,但是我对此不满意,因为它与其
1回复

错误:从'const char *'到'int'的无效转换[-fpermissive]

我一直在与arduino一起进行一个项目,该项目在LCD上显示敲门笑话,但在编码时遇到了问题。 这就是我到目前为止 但是当我运行它时,我得到了错误 搜寻互联网后,我什么都没找到,那么有人有解决方案吗? 顺便说一句:我是arduino和C / C ++的新手