我正在Arduino中开发一个代码,其中使用了"sprintf",需要知道之后我是否应该使用"free"来取消分配内存还是不需要?
当我使用"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");
}
}
sprintf()
简单地写入你为它提供的缓冲区空间;它既不知道也不关心缓冲区是如何分配的;这取决于你的代码来处理。
在显示的代码中,您不应该调用 free(valread)
,因为您没有使用 malloc()
(或 calloc()
(分配它。 您应该只free()
以前从堆中分配的内存。
标准库不会执行任何动态内存操作(除了旨在完成工作的 malloc
等函数(。
因此,如果参数是局部变量,则不应释放内存。如果参数是从 malloc
创建的指针,则最终应释放它。