我的简单程序中的内存故障

时间:2014-01-21 09:50:20

标签: c++ c linux unix command-line

当我像./a.out一样运行我的应用程序时出现此错误: 我编译我的应用程序,如:gcc test1.c。 内存故障

我的代码是

 int main (void)
 {
   DIR *dp;
   struct dirent *ep;
   const char *path_dir ="/home/risorse/ae23054/Giuseppe";//Inserire la directory qui

   dp = opendir (path_dir);
   if (dp != NULL)
     {
       while (ep = readdir (dp)){
         printf(ep->d_name);
         char nome_file[256];
         strcpy(nome_file,ep->d_name);

         FILE *fd=fopen(nome_file, "a+");
         fprintf(fd,"\nEXIT");
         fclose(fd);
       }
       (void) closedir (dp);
     }
   else
     perror ("Non posso aprire la directory");

   return -1;
}

感谢

2 个答案:

答案 0 :(得分:3)

你使用fopen结果而不检查它是否为NULL。

答案 1 :(得分:2)

如果您当前的目录不是path_dir并且您当前的工作目录不包含与path_dir中的文件具有相同名称的文件,则fopen将返回NULL。

您的程序很可能会崩溃,因为您在尝试使用它之前未检查返回值(在以下fprintffclose来电中。

可能的解决方案是在尝试fopen文件之前更改到目录。这意味着您将获得预期的行为。虽然,如果在获取目录条目后立即删除/移动文件,仍需要检查NULL。

...
dp = opendir (path_dir);
if (dp != NULL)
  {
    fchdir(dirfd(dp));
...
相关问题