몇 개의 파일에서 여러 개의 글로벌 포인터를 공유해야합니다. 포인터는 본질적으로 길이가 런타임에서 결정되는 double 배열입니다.C 포인터 - 하나의 파일에 다른 포인터를 사용하여 전역 포인터를 할당합니까?
여기에는 문제를 일으킨 코드 조각이 포함되어 있습니다. 이것은 정확한 코드가 아니지만, 그것은 정확하게 모든 점을 보여
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"
// 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);
}
주요
#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 .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이 될 것이고, 그러면 세그먼트 오류가 발생합니다.
왜 오류 및 수정 방법?
모든 코드를 보지 않고 명확하지 않습니다. 그러나 전역 파일을 파일간에 공유하는 것이 어떤 문제도 일으키지 않습니다. 포인터를 초기화하는 함수가 실제로 포인터를 수정하고 포인터의 로컬 복사본을 수정하는 것이 아니라 두 번 확인합니다. – TJD
foo.h (또는' all_bundle')을 사용하여 모든 모듈 (* .c)에? – alk
'num_firm' 값이 무엇인지 확인합니다. 디버거로 문제를 쉽게 찾을 수 있어야합니다. – Sulthan