C 信号:分段错误(核心已转储)

Rad*_*dex 0 c

我正在学习C,我遇到了这个错误。为什么我不能将指针传递给函数 as change(&p_x);and onlychange(&x);有效?谢谢

#include <stdio.h>

void change(int *p_xa) // GET ERROR HERE signal: segmentation fault (core dumped)
{
    *p_xa = 999;
}
    
int main()
{
    int x = 1;
    int * p_x = &x;

    *p_x = 2;

    change(&p_x); // cannot do this

    printf("x is: %d \n", *p_x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*hil 6

change有一个类型为 的参数int *

通话通过&p_x。的类型p_xint *. 的类型&p_xint **. 这是参数的错误类型。传递&p_x的是地址p_x,但是你想传递的是地址x

通过p_x,不通过&p_x。的值p_x是 的地址x

在编译器中启用警告并将其升级为错误。使用 Clang,从 开始-Wmost -Werror。对于 GCC,从-Wall -Werror. 使用 MSVC,从/W3 /WX. 当您执行此操作时,当参数对于声明的参数来说是不正确的类型时,编译器会警告您。