私は一般的に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 つの関数は、私が問題を抱えている唯一の関数です。私は何を間違っていますか?