繁体   English   中英

是什么导致我的 C 程序中出现这种分段错误?

[英]What causes this segmentation fault in my C program?

这是代码

#include <stdio.h>
int* pointer()
{   static int x=8;
    int **z;
    *z=&x;
    printf("%p\n",z);
    printf("%p\n",*z);
    return *z;}
void main()
{   printf("%d",*(pointer()));}

它应该至少打印地址但不是单个输出。当我调试它时。它说

第 5 行的分段错误:*z=&x

指针z未初始化,因此具有不确定的值

int **z;

因此,取消引用指针会调用未定义的行为。

*z=&x;

将您的方法与指针z的声明一起使用,您可以定义函数,例如以下方式

int * pointer( void )
{   
    static int x=8;
    
    int *p = &x;
    int **z = &p;

    printf( "%p\n", ( void * )z );
    printf( "%p\n",( void * )*z );

    return *z;
}

请注意,根据 C 标准,不带参数的函数main应声明为

int main( void )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM