[英]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 a
或malloc()
一個整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.