いくつかのファイル間で複数のグローバルポインタを共有する必要があります。ポインタは本質的には実行時に長さが決まるdoubleの配列です。Cポインタ - 別のファイルでグローバルポインタを1つのファイルに割り当てますか?
ここには、問題の原因となったコードが含まれています。これは、正確なコードではないが、それは正確にすべてのポイントを示す:
foo.hという
#ifndef FOOH
#define FOOH
/* ------------------
COMMON VARIABLES
---------------------*/
// create_bundles.c
extern double *all_bundle;
/* ------------------
COMMON FUNCTIONS
---------------------*/
// create_bundles.c
void create_bundles(int num_firm);
// memory_allocation.c
void allocate_memory(int num_firm, int num_bundle);
void clean_memory(void);
#endif
create_bundles.c
#include "foo.h"
extern double *all_bundle;
void create_bundles(int num_firm) {
int i;
for (i = 0; i < num_firm; i++) {
all_bundle[i] = 1
}
memory_allocation.c
#include "foo.h"
// create_bundles.c
double *all_bundle = NULL;
void allocate_memory(int num_firm, int num_bundle) {
all_bundle = calloc(num_bundle * num_firm, sizeof(double));
}
void clean_memory(void) {
free(all_bundle);
}
主.c
#include "foo.h"
void main(int num_firm, int num_bundle) {
allocate_memory(num_firm, num_bundle);
create_bundles(num_firm);
clean_memory();
}
私がall_bundle [i]を印刷すると、すべて0になるので、セグメント化エラーが発生します。
なぜエラーとそれを修正するのですか?
すべてのコードを見ることなく、明確ではありません。しかし、グローバルにファイルを共有しても問題はありません。ポインタを初期化する関数が実際にポインタを修正する(** doubleの引数を取る)だけでなく、ポインタのローカルコピーを変更するのではないことを再確認します – TJD
あなたがinucude foo.h(または ' all_bundle')を使用してすべてのモジュール(* .c)に送信しますか? – alk
私は 'num_firm'の値が何であるかチェックします。デバッグで問題を見つけるのは簡単なはずです。 – Sulthan