簡體   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