0

私は一般的にCとメモリ割り当てにかなり慣れていません。基本的に私がやろうとしているのは、未知のサイズの入力ファイルの内容をコピーし、再帰を使用してその内容を逆にすることです。私は非常に近いと感じていますが、ファイルの逆の内容であると思われる内容を入れようとすると、セグメンテーション違反が発生し続けます (私はそれを正しくやっていると思うので.... )

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int recursive_back(char **lines, int lineNumber, FILE *input) {

   char *input_line = malloc(sizeof(char) * 1000);
   lines = realloc(lines, (lineNumber) * 1000 * sizeof(char));
   if(fgets(input_line, 201, input) == NULL) {
      *(lines + lineNumber) = input_line;
      return 1;
   }  
   else {
      printf("%d\n", lineNumber);
      return  (1+recursive_back(lines, ++lineNumber, input));

   }

}

void backward (FILE *input, FILE *output, int debugflag )   {
   int i;
   char **lines;                            //store lines in here
   lines = malloc(1000 * sizeof(char *) ); //1000 lines

   if(lines == NULL) {         //if malloc failed
      fprintf(stderr, "malloc of lines failed\n");
      exit(1);
   }

   int finalLineCount, lineCount;
   finalLineCount = recursive_back(lines, 0, input);

   printf("test %d\n", finalLineCount);

   for(i = finalLineCount; i > 0; i--) {     
      fputs(*(lines+i), output);            //segfault here
   }

}

コードをテストするために単純な入力ファイルを使用しています。私の入力ファイルは、「これはテスト入力ファイルです」という 6 行の長さです。実際の入力ファイルは別の関数で開かれ、backward 関数に渡されます。さまざまなオプションを試してみたので、プログラムの他の機能が機能することを確認しました。これらの 2 つの関数は、私が問題を抱えている唯一の関数です。私は何を間違っていますか?

4

1 に答える 1