特定の条件を渡すすべての構造体を配列に集めるCプログラムを作成しようとしています。関数によって変更された後にC配列が壊れてしまう
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Book {
char title[20];
unsigned int published;
char authors[50];
unsigned int pages;
};
unsigned int get_books_from(unsigned int year, int length, struct Book data[], struct Book results[]);
int main(int argc, char* argv[]) {
struct Book data[5];
// Init book pool inside data
struct Book books[0];
unsigned int books_count = get_books_from(1973, 5, data, books);
return 0;
}
unsigned int get_books_from(unsigned int year, int length, struct Book data[], struct Book results[]) {
results = (struct Book*) malloc(sizeof(struct Book));
unsigned int results_count = 0;
int i;
for (i = 0; i < length; i++) {
if (data[i].published == year) {
*(results + results_count) = data[i];
results = (struct Book*) realloc(results, (++results_count + 1) * sizeof(struct Book));
}
}
return results_count;
}
ロジックは、しかし、(それがresults
と呼ばれています)get_books_from
関数の外books
配列の内容にアクセスしようと、すべてのデータが破損したときに、正常に動作しているようです。元のデータの一部はまだそこにありますが、正しい場所にはありません。データがシフトしたように見えます。私はbooks
とresults
の両方のポインタをチェックしていて、関数の終了後にそれらの変数がメモリ内の同じ場所を指していないように見えます。何が問題なの?あなたのget_books_from
'構造体帳のブックは何ですか:
おそらく、この(未テスト、非エラーは簡潔にするためommitedコード、宣言との#includeをチェックする)のような何かをしたいです[0]; 'そんなことはあまり意味がありません。 –