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

Memory fault in my simple program in C

本文关键字:内存 故障 简单 我在 程序      更新时间:2023-10-16

当我像./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;
}

谢谢

您使用fopen结果而不检查它是无效的。

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

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

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

...
dp = opendir (path_dir);
if (dp != NULL)
  {
    fchdir(dirfd(dp));
...