Я создаю программу, которая читает файл, инвертирует его по частям и сохраняет результат в новом файле без выделения фрагментов размером более 1 КБ. Когда я запускаю его в терминале, он создает файл, но не записывает в него, вместо этого он падает и выдает ошибку сегментации 11. Когда я пытаюсь отладить его с помощью lldb, весь код выполняется без проблем. Мой терминал использует другие правила распределения, чем lldb? Как я могу решить это?
Я запускал код с большими и маленькими файлами, но даже с почти пустым txt-файлом он вылетает.
Я использую OSX 10.10.5 с lldb-340.4.119
int const CHUNK_SIZE = 1024;
int chunk_index = 0;
int character;
char new_filename[] = "output";
struct Chunk {
struct Chunk *previous;
int data[(CHUNK_SIZE-sizeof(struct Chunk*))/sizeof(int)];
};
struct Chunk* memory = (struct Chunk *)malloc(sizeof(struct Chunk));
struct Chunk* temp;
FILE *fp;
fp = fopen(argv[1], "r");
// read file into memory
character = fgetc(fp);
do {
memory->data[chunk_index] = character;
chunk_index++;
if ( chunk_index*sizeof(int) > CHUNK_SIZE-sizeof(struct Chunk*)){
chunk_index = 0;
temp = (struct Chunk *)malloc(sizeof(struct Chunk));
temp->previous = memory;
memory = temp;
}
character = fgetc(fp);
}
while (character !=EOF);
chunk_index--;
fclose(fp);
// write to new file
fp = fopen(new_filename, "wb");
do {
while (chunk_index >=0) {
printf("%c", memory->data[chunk_index]);
fprintf(fp, "%c", memory->data[chunk_index]);
chunk_index--;
}
chunk_index = (CHUNK_SIZE-sizeof(struct Chunk*))/sizeof(int);
temp = memory;
memory = memory->previous;
free(temp);
} while(memory!=NULL);