当前位置: 技术问答>linux和unix
内存问题
来源: 互联网 发布时间:2016-04-29
本文导语: 如下是我的代码: 主要是写一个简单的shell,这里是为了实现在一行中实现多命令的解析 但是在内存释放的时候出了错误,下面的handle是处理分号后得到的字符 数组的结果,但是如果我用while ( ( argslist = splitline ...
如下是我的代码:
主要是写一个简单的shell,这里是为了实现在一行中实现多命令的解析
但是在内存释放的时候出了错误,下面的handle是处理分号后得到的字符
数组的结果,但是如果我用while ( ( argslist = splitline (*handle++) ) != NULL )
那么在释放的时候就有handle的内存已经释放,如果用
while ( ( argslist = splitline (handle[i++]) ) != NULL )
的话就可以的到正确的释放,我不明白这里有什么的不同,请高手指教阿!
主要是写一个简单的shell,这里是为了实现在一行中实现多命令的解析
但是在内存释放的时候出了错误,下面的handle是处理分号后得到的字符
数组的结果,但是如果我用while ( ( argslist = splitline (*handle++) ) != NULL )
那么在释放的时候就有handle的内存已经释放,如果用
while ( ( argslist = splitline (handle[i++]) ) != NULL )
的话就可以的到正确的释放,我不明白这里有什么的不同,请高手指教阿!
10 #include "smsh1.h"
11
12 int main ()
13 {
14 int result ;
15 char *get_line ;
16 char **handle ; /*return the array after semiconlon handle */
17 char **argslist ; /*return the array after command hanldle*/
18 int i = 0 ;
19 void setup () ;
20
21 while ( (get_line = get_command() ) != NULL )
22 {
23 handle = handle_semiconlon ( get_line ) ;
24 while ( ( argslist = splitline (handle[i++]) ) != NULL ) /*here user i to replace *handle++*/
25 {
26 result = execute( argslist ) ;
27 freelist( argslist ) ;
28 }
29 freelist(handle) ;
30 free( get_line ) ;
31 }
32
33 return 0 ;
34 }
35
36 void setup ()
37 {
38 signal(SIGINT , SIG_IGN );
39 signal(SIGQUIT , SIG_IGN ) ;
40 }
41
|
handle[i++], handle的值不会改变, 所以free的时候正确
*handle++, handle的值会改变,每次加4. free的时候handle指针不对, 会导致memory leak
*handle++, handle的值会改变,每次加4. free的时候handle指针不对, 会导致memory leak
|
楼上说的很对格
还有如果很多需要手动释放内存的话 建议用gc库 来分配内存 自动管理内存资源
还有如果很多需要手动释放内存的话 建议用gc库 来分配内存 自动管理内存资源