代码中的"sprintf"用法是否需要释放内存?

Does "sprintf" usage in code need to free the memory?

本文关键字:释放 内存 用法 sprintf 代码 是否      更新时间:2023-10-16

我正在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 创建的指针,则最终应释放它。