执行这部分代码后出现分段错误。如果我注释掉第一个打印f,它工作正常。为什么会这样?
#include <stdio.h>
int Func (int *a){
printf("%dn",56 );
printf("a is %dn",*a );
return 3;
}
int main(){
int N, i, Planet, *a,junk;
junk=scanf("%d", &N );
*a = N;
Planet = Func(a);
printf("%dn", Planet);
return 0 ;
}
在 main
函数中,您定义了 int *a
指针变量:
int main(){ int N, i, Planet, *a,junk;
但是,您取消引用了指针,而之前没有为其分配任何内存,也没有将其设置为指向有意义的内容:
*a = N;
这会导致未定义的行为。
您可能想要的是向N
提出a
点?如果是这样,这是正确的语法:
a = &N;
现在您可以使用*a
将一些内容写入N
。
附言作为一般规则,我建议您每行声明一个变量,并初始化指向NULL
的指针,例如:
int man() {
int *a = NULL;
...