c - 当我在函数中分配指针时,在这种情况下出现段错误的原因是什么

标签 c pointers memory

这是代码:

#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()函数中手动分配指针时没有问题,但在函数中分配时出现段错误。为什么会这样呢?

最佳答案

函数分配没有效果。它所做的只是执行本地分配,这对调用者没有影响。因此,cmain 中未定义,并且出现段错误。

为了让 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/

相关文章:

c - 按下两个开关时打开 LED

c - 获取正在运行的 firefox 进程的 PID

c++ - 如何返回 vector 中元素的索引

c# - 可以在不刷新的情况下连续写入流,将其内容强制写入大对象堆吗?

c++ - CRT & new - 92 字节的 30 次调用给出 "bad_alloc nomem"

c - 在 Perl XS 中使用结构

c - 无法在共享对象中找到符号

c - 打印指向 char 指针数组的指针时出现段错误

C 指针和队列的问题

java - 现代文本编辑器中的片表和绳索的内存管理