当使用内存分配函数用作条件语句时会发生什么
What happens when a memory allocating function is used as conditional statement
我具有返回 char*
的函数 foo
。在函数的主体中,我声明char*
变量,使用malloc()
分配内存并返回。
现在,如果我尝试将函数foo用作条件语句(例如if (foo()) { //code } )
,分配的内存会发生什么?我无法理解的是,当调用foo()
时,未将返回值分配给变量,内存是否分配了foo()
,内存泄漏?
我打电话给foo()
时能够执行程序,但没有将返回值分配给变量。但是我无法弄清楚在这种情况下是否真的分配了内存。
评论简洁地回答了您的问题。
我无法理解的是,当foo被调用时 将返回值分配给变量,是分配的内存 foo,内存泄漏?
这确实是内存泄漏。您正在分配一些内存,然后忘记指针的指针。
另一方面重要的是要实现的重要事情,在评论和其他答案中指出的是您正在泄漏内存。
char* foo()
{
// Do things
char* info = malloc;
strcpy(info, "Hello");
return info;
}
int main()
{
if (foo())
{
std::cout << "Success" << std::endl;
}
}
呼叫foo()
是有效的,并且由于它返回nullptr
,条件是正确的;但是,当foo()
返回一旦丢失了指针,您已经泄露了foo()
分配的内存。
,如果您需要:
,可以将指针存储在相同的条件下if (char* f = foo())
{
std::cout << "Success" std::endl;
// Deallocate f
}
这将调用foo()
,将结果分配给f
并检查有效的指针。
否则,您可以通过简单地使用std::string
(或者您使用的不是char*
,可以使用std::unique_ptr
)来解决此问题:
std::string foo()
{
// Do things
std::string info = "Hello";
return info;
}
int main()
{
if (foo().length()) // does foo contain a valid string?
{
std::cout << "Success" << std::endl;
}
}
与您看到的样本相同:
char * strcpy ( char * destination, const char * source );
您应该将这样的功能设计到Alloc内存中,您可以在任何地方使用它而不会关心内存泄漏。
在这里采样。例如您的代码:
char* yourfunc() {
char *str;
str = (char*)malloc(sizeof(char)*5);//only sample code
return str;
}
不良代码,因为当您malloc时,必须使用免费功能:免费功能(str)。改进代码:
char* yourfunc(char* yourdes) {
//do anything
return yourdes;
}
使用它:
char *abc;
abc = (char*)malloc(sizeof(char)*5); //init here
yourfunc(abc);
free(abc); // free here
相关文章:
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 主线的等价语句是什么
- 标志 |= f == s[i],这个语句会做什么?
- C++ 参考:这两个语句有什么区别?
- 这两个C++语句连接字符串有什么区别?
- 什么可以用来替换代码中的循环和 if 语句?
- 对于单个数据 WORD 的 memcpy 和赋值语句有什么区别?
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- 在 if 语句中处理多个 or 的更优雅的方法是什么
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- 学习时空复杂性时语句XYZ的含义是什么?
- if 语句正在检查什么条件
- 在 cout 语句中首先运行什么?(C++17)
- 这两个类语句之间有什么区别?
- 当您希望在Arduino Uno编程中同时执行不同函数时,使用什么代码/语句
- 编译器遇到返回语句时会做什么
- 当执行此代码中的第二个语句时,内部会发生什么
- C++:无论如何,有什么可以知道是什么触发了 If 语句