0

我的代码工作得很好,但是当我退出我的 simpleshell 时,我遇到了分段错误。atexit(final) 的 final 仍然被调用并正常工作。我认为问题出在 atexit() 上,因为当从代码中删除 atexit() 时,我可以正确地“退出”(即 CNTRL+D)simpleshell。但是,重申一下,一旦 atexit() 在我的代码中(见下文以查看它的位置),它会在我退出时导致分段错误(即使“final”执行)。

static void final(void) {
    flag = 0;
    assign6 = fopen(".logfile.txt", "a");
    assign62 = fopen(".temp_logger.txt", "r");
      while(fgets(test2, sizeof(test2), assign62))
      {
        fprintf(assign6, test2);
      }
      fclose(assign6);
      fclose(assign62);
      remove(".temp_logger.txt");
    }
4

1 回答 1

0

您没有检查 assign62 文件指针是否正确fopen,看起来您正在删除它:

static void final(void) {
    flag = 0;
    assign6 = fopen(".logfile.txt", "a");
    assign62 = fopen(".temp_logger.txt", "r");
    if (assign6 && assign62) {
      while(fgets(test2, sizeof(test2), assign62))
      {
        fprintf(assign6, test2);
      }
      fclose(assign6);
      fclose(assign62);
      remove(".temp_logger.txt");
    }
}
于 2013-11-29T04:05:02.633 回答