我正在Arduino中开发一个代码,其中我使用了“ sprintf”,是否需要知道之后是否应该使用“ free”来取消分配内存?
就像我使用“免费”时一样,它禁用了串行通信,如果没有必要,我可以绕过它,并且代码可以正常使用。
我已附上代码片段
请提出建议
谢谢
void setup() {
Serial.begin(115200);
}
int toString(char a[]) {
int i, j ;
int dec = 0;
for(i=0; i<4; i++){
dec = dec * 10 + ( a[i] - '0' );
}
return dec;
}
void loop() {
// put your main code here, to run repeatedly:
int val1 = 2;
int val2 = 1;
int val3 = 1;
int val4 = 8;
char valread[10];
sprintf(valread, "%c%c%c%c", val1,val2,val3,val4);
int VerifyMainpower = toString(valread);
free(valread);
delay(5);
if(VerifyMainpower < 2100 || VerifyMainpower > 2300){
Serial.print("Error003_02");
}
}
答案 0 :(得分:4)
sprintf()
只需写入您为其提供的缓冲区空间;它既不知道也不在乎缓冲区是如何分配的;这取决于您要处理的代码。
在所示的代码中,您不应调用free(valread)
,因为您没有使用malloc()
(或calloc()
)进行分配。您应该只free()
以前从堆中分配的内存。
答案 1 :(得分:0)
标准库不会执行任何动态内存操作(除了malloc
之类的旨在完成工作的功能之外)。
因此,如果参数是局部变量,则不应释放内存。如果参数是从malloc
创建的指针,则应最终释放它。