这是代码:
#include<stdio.h>
void assign (int *a1, int *a2) {
a1 = a2;
}
int main() {
int *a; int b; int *c; int d;
b = d = 5;
a = &b;
printf("%d", *a);
assign(c, &d);
printf("\n%d", *c);
return 0;
}
在main()函数中手动分配指针时没有问题,但在函数中分配时出现段错误。为什么会这样呢?
最佳答案
函数分配
没有效果。它所做的只是执行本地分配,这对调用者没有影响。因此,c
在 main
中未定义,并且出现段错误。
为了让 assign
执行您想要的操作,您必须将 c
的地址传递给它,然后在 assign
中进行指针赋值>.
尝试以下操作:
#include <stdio.h>
void assign (int **a1, int *a2) {
*a1 = a2;
}
int main() {
int *a; int b; int *c; int d;
b = d = 5;
a = &b;
printf("%d\n", *a);
assign(&c, &d);
printf("%d\n", *c);
return 0;
}
输出为:
5
5
我还将换行符移至格式字符串的末尾,这是放置它们的正常位置。
关于c - 当我在函数中分配指针时,在这种情况下出现段错误的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643626/