所以我创建了几个文件:
file1.c中
#include "file2.h"
...
int *p; <-GLOBAL VARIABLE
...
void main(){
printer();
}
file2.c中
#include "file1.h"
void printer(){
*p = 5;
printf("%d",*p);
}
file1.h
extern int *p;
file2.h
extern void printer(void);
代码编译。但是,当我运行它时,我得到分段错误。我试图在任何地方寻找解决方案,但无法找到一个好的解决方案。
我尝试用printer(void)
替换{2}中的printer()
没有结果(并且不确定它是否正确)。
有没有人可能看到我的问题的解决方案?
答案 0 :(得分:1)
您从未为p
分配内存以引用或以其他方式将其初始化为对正确分配的内存的引用。执行*p = 5
时,您尝试引用不允许访问的内存。
典型的解决方案是动态分配内存,例如:
p = malloc( sizeof(int) );
答案 1 :(得分:1)
根据一个文件来考虑这个:
#include <stdio.h>
int *p; <-GLOBAL VARIABLE
void printer();
void main(){
printer();
}
void printer(){
*p = 5;
printf("%d",*p);
}
您所做的是获取指向整数的指针的初始化但未定义的变量。当你去设置那个指针时,它没有被初始化。你需要初始化它并用&amp;引用它,或者更好的是,动态地为它分配内存。
也许在您的主要功能中,您可以执行以下操作:
int main(){
p = calloc(1, sizeof(int));
printer();
free(p);
}