关于c程序内存释放的两个小问题 (刚注册没分,请原谅)

hgalois hgalois 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面是源程序 (两个问题我都写在里面相应的位置上了, 望高手指点):

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <error.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>

/***** recursion directory manipulate ******
*author: hgalois
*last modify: 2007-7-21
*/


int recurDir(const char *path, int indent); /* recuring show dir items */

int main(int argc, char *argv[])
{
if(argc !=2)
{
printf("Syntax:%s path\n", argv[0]);
return 1;
}
recurDir(argv[1], 0);

return 0;
}

int recurDir(const char *path, int indent)
{
int i;
char tempStr[256], tempDname[256];
DIR *myDir;
struct dirent *myFile;
struct stat *fileStat;

fileStat = malloc(sizeof(struct stat));

if(!(myDir = opendir(path)))
{
perror("opendir()");
return -1;
}

while((myFile = readdir(myDir)) != NULL)
{
for(i = 0; i < indent; ++i)
putchar(' ');
printf("%s\n",myFile->d_name);

if(strncmp(myFile->d_name, ".", 1) && strncmp(myFile->d_name, "..", 2))
{
strcpy(tempStr, path);
strcat(tempStr, "/");
sprintf(tempDname, "%s", myFile->d_name);
strncat(tempStr, tempDname, 50);

if(lstat(tempStr,fileStat) == -1)
{
perror("lstat()");
return -1;
}
if(S_ISDIR(fileStat->st_mode) && !S_ISLNK(fileStat->st_mode))
recurDir(tempStr, indent + 4);
}
问题1:此处是否需要加上free(myFile)?我加上后会出现错误:(*** glibc detected *** free(): invalid pointer: 0x0804a084 ***
Aborted)
理论上我觉得应该加,因为指针再次赋值前一定先释放,否则会内存泄漏。
但是为什么会出错,请高手指点。
}

if(closedir(myDir) == -1)
{
perror("closedir()");
return -1;
}

free(fileStat);
问题2:此处是否需要加上free(myDir)?和问题1的出错方式一样。
return 0;
}

如果不加上这两条free语句程序运行正常,能得到预期结果。
...全文

相关推荐

c语言编写注册与登录的程序

c语言编c语言编写注册与登录的程序c语言编写注册与登录的程序写注册与登录的程序

聆听随风

C盘空间释放,解决你的C盘变红烦恼

你还在为你的C盘扩容烦恼吗?你还在为你的C盘发红而瑟瑟发抖吗?你还在为你的电脑反应慢,反应卡顿忧愁吗?它来了,它带着能量来了。因不同系统C盘可以释放内容不同,因此扩容大小不同。亲测释放20G。

懒羊羊大叔

C_程序注册激活代码

这是一个C语言写的程序注册激活代码示例,供大家学习参考……

梦翰斌纷

解决内存不能为Read问题

有时候,在我们允许某个程序或进行某项操作时,会弹出一个内存不能为Read或Written的提示,导致操作失败,那么这该如何解决呢?今天u大师就教大家一个解决方法。 其实对于弹出内存不能为Read/Written有如下几种情况: 1:“0X????????”指令引用的“0x00000000”内存,该内存不能为“read”或“written”,然后应用程序被关闭。 2:在运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭 3:还有window media player 有时候也会出现问题!~比如出现“内部应用程序错误”附带还有诸如在线电影没法看。 4:在使用浏览器的时候有时候也会提示IE出错等信息,我曾遇到过的问题是网页能打开,但是网页中的超连接等都打不开。重装IE真是不划算。 5: 在进入游戏的时候有时候会出现比如,“0x77f5cd0”指令引用“0xffffffff”内 存,该内存不能为“read 等等的问题!~ 如果遇到了上述问题可以尝试一下这种解决方法。虽然不是绝对的能解决,但可以把它为一种解决方案,如果无效,可以考虑其他的原因造成以上情况!~ 运行 输入cmd 回车在命令提示符下输入:for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1 本文来源于:u大师u盘启动盘制作工具http://www.udashi.com/n/20130221/482.html

xlsxu

c语言编写注册与登录的程序.txt

c语言编写注册与登录的程序 c语言编写注册与登录的程序

dsaz123
评论 5
收藏 已收藏
分享
返回顶部
hgalois
Linux/Unix社区 23,224 成员 74,535 内容