This code
#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() {
}
gives me the following error messages:
sketch_dec11f.cpp: In function ‘void setup()’:
sketch_dec11f.cpp:14:7: error: invalid conversion from ‘void*’ to ‘unsigned int*’
What am I doing wrong?
(tried it with malloc() as well, also didn’t work!)
You definitely don’t want
alloca(). That’s an allocation that is on the stack of the function and only lasts for the duration of the call. It lets you have dynamic arrays that go away on function return (in C++ you could do this with RAII, but in Callocawas the only way).You just need a cast in your allocation. Try
i = (unsigned int *)malloc(StringLength() * sizeof(*i)). Note thesizeof(*i). That’s the size of one member:sizeof(i)is the size of the pointer and is not likely to be related to what’s inside.