当前位置: 技术问答>linux和unix
请教!Linux系统C开发的程序,为什么我的程序运行时内存持续增长,程序退出后内存也没有降低?
来源: 互联网 发布时间:2015-11-04
本文导语: 我的程序中,用到缓存的地方要不定义一个全局变量char *buffer[8000],要不在某个函数中定义一个局部变量char *buffer[8000],据我了解,这样使用内存并不会造成内存没有被释放的问题。 为什么我的程序会在运行时内存...
我的程序中,用到缓存的地方要不定义一个全局变量char *buffer[8000],要不在某个函数中定义一个局部变量char *buffer[8000],据我了解,这样使用内存并不会造成内存没有被释放的问题。
为什么我的程序会在运行时内存持续增长,程序退出后内存也没有被释放?
我考虑到还有可能造成这个问题的一个原因,就是
有的函数,比如convert(char *buff),在主函数中这样引用convert(&buffer[i]),函数体convert中直接读buff中的内容,读完后主函数i+length,再循环调用convert(&buffer[i])。
请教大虾,这样也会引起这样的问题吗?
为什么我的程序会在运行时内存持续增长,程序退出后内存也没有被释放?
我考虑到还有可能造成这个问题的一个原因,就是
有的函数,比如convert(char *buff),在主函数中这样引用convert(&buffer[i]),函数体convert中直接读buff中的内容,读完后主函数i+length,再循环调用convert(&buffer[i])。
请教大虾,这样也会引起这样的问题吗?
|
如果使用char*并且是动态分派的内存,不管是局部变量还是全局变量都要free或delete掉.
|
char *buffer[8000];
convert(&buffer[i]);
以上两句,明显的语法错误。
char *buffer[8000]是声明8000个指向char的指针,也就是地址,可以指向8000个字符串。
第二句中buffer[i]本身就是一个地址,你再取地址是什么呢?
要用也该是convert(buffer[i]);
convert(&buffer[i]);
以上两句,明显的语法错误。
char *buffer[8000]是声明8000个指向char的指针,也就是地址,可以指向8000个字符串。
第二句中buffer[i]本身就是一个地址,你再取地址是什么呢?
要用也该是convert(buffer[i]);