关于内存泄漏的问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 14:51:47
关于内存泄漏的问题
#include <stdio.h>

void getmemory(char *p);
int main(int argc, char *argv[])
{
char *str=NULL;
getmemory(str);
strcpy(str,"hello");
printf("%s",str);
}

void getmemory(char *p)
{
p=(char *)malloc(100);
}
不能执行,说是implicit declaration of function "int malloc(...)"
哪里有问题?

你应该把声明malloc函数的头文件包进来

加上#include <stdlib>
还有,形参不改变实参,所以你的分配函数没用。
改成
void getmemory(char **p)
{
*p = (char*)malloc(100);
}
调用的时候用
getmemory(&p);

还有一点,malloc以后要free.

malloc是声明在malloc.h和stdlib的,包含任意一个即可。
也可以都不包含。

----------

直接拷贝粘贴上述代码到Win-TC,编译成功。无法重现错误。

----------

分析:
getmemory得到的内存没有被释放,可能导致运行时错误。
str指针需要在使用后free掉。

至于implicit declaration of function "int malloc(...)"
是说malloc函数被隐式声明,这应该是个warning,而不是error,默认设置下应该不会中断编译。

如果因为这个warning中断编译,请检查你的编译器的编译选项。

-----------------

P.S. 如果在VC下编译,则另需要包含<string.h>和<stdlib.h>以正常使用strcpy函数和malloc函数。另外main结束需要有整型返回值,建议为return 0。

--------------------------------

另外需要注意的是,即便编译通过,这段代码还是有问题的,不能将传值引用的指针分配空间后返回,str在执行getmemory之后值将仍为NULL。

开头加上
#include <stdlib.h>