簡體   English   中英

結構指針

[英]Structure pointer

#include<stdio.h>
int c;
int main()
{
        struct abc{
        int *a;
        char *ch[10];
        };
        struct abc obj1;
        struct abc *obj;
        obj = & obj1;
        scanf("%d",obj->a);
        printf("\nY");
        scanf("%s",&obj->ch);
        printf("\nY");
return 0;
}

我在fedora上使用了VIM編輯器和Gcc編譯器。.我遇到了SEGMENTATION FAULT(CORE DUMPED ??)//是什么意思?

“分段錯誤”表示您的程序試圖訪問不允許的內存。 您的程序有多個指針和初始化錯誤。

我想你想你的數組是char ch[10] ,而不是char *ch[10] 您還需要更改scanf()調用以使其匹配: scanf("%s", obj->ch);

a領域也是如此。 它可能不應該是指針,並且應該將指針傳遞給scanf()

scanf("%d", &obj->a);

我收到了SEGMENTATION FAULT(CORE DUPED ??)//是什么意思?

發生內存訪問沖突的變量導致分段錯誤。

scanf("%d",obj->a);

int *a; -結構成員a是未初始化的指針,但嘗試將輸入輸入到它所指向的位置。 造成您的細分錯誤。

 obj->a = malloc(sizeof(int)) ;

現在您可以輸入a指向位置。

 scanf("%d", &(obj->a) );

使用您執行的輸入操作類型,結構定義不需要原始指針-

struct abc{
    int *a;         // Change this to int a; or make a point to a valid memory location
    char *ch[10];   // Change this to char ch[10]; or initialize it with pointers pointing to a valid memory locations
                    // and then take input on to pointer pointing location.
};

請注意兩者之間的區別-

int a  ;  // Can take input directly to "a"
int *a ;  // First "a" must point to a valid memory location that can hold an int
          // Then, can take input to "a" pointing location

擴展卡爾的答案: char *ch[10]創建一個包含10個指向字符的指針的數組。 您想要的是一個10個字符的數組。

您的代碼調用未定義的行為。

您應該有char ch[10]; 並使用具有預設寬度的scanf以避免溢出

scanf("9%s",&obj->ch); 

更多: http : //www.cplusplus.com/reference/clibrary/cstdio/scanf/

將該結構定義為具有一個指向int的指針,您無需對其進行初始化,因此它指向隨機位置,從而向您不擁有的存儲位置(即UB寫入。 可以將其切換為局部變量int amalloc()一個整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM