代码中的"sprintf"用法是否需要释放内存?
Does "sprintf" usage in code need to free the memory?
我正在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
创建的指针,则最终应释放它。
相关文章:
- 如何在c++中释放内存
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 释放内存(主题模板)时出现问题
- 使用后自动释放内存
- C++ 如何释放内存
- 从函数内对象的向量中释放内存
- C++ 在不释放内存的情况下调用析构函数
- 多个线程之间的获取-释放内存顺序
- C++ - 析构函数只是释放内存还是实际删除对象
- 使用 RAII 替换最终块以释放内存
- 如何通过带有指向基类的指针的删除运算符释放内存
- 代码中的"sprintf"用法是否需要释放内存?
- C++何时使用 delete[] 并正确释放内存?
- 为什么此获取和释放内存围栏不能给出一致的值?
- 抛出新表达式的参数子表达式时释放内存
- 在这种情况下,如何释放内存?
- 在 c++ 中应按什么顺序释放内存?