簡體   English   中英

C結構總線錯誤10

[英]C Structures Bus Error 10

我在C語言中有一個圖釘,並且使用一個函數從用戶那里獲取結構的值。 下面是我的結構。

typedef struct {
    char    *name;
    char    *chemical_symbol;
    char    *class;
    int     atomic_number;
    double  atomic_weight;
    int     *electrons;
} element_t;

這是我用來從用戶那里獲取值的功能。 問題在於詢問化學符號后的功能。 我收到總線錯誤:10.我對總線錯誤的理解是處理器無法嘗試進行內存訪問時。 任何幫助表示贊賞。 謝謝!

element_t scan_element() {

    element_t element;

    printf ("Enter New Element Information:\n\n");

    printf("Element Name: ");
    scanf("%s", element.name);

    printf("Element Chemical Symbol: ");
    scanf("%s", element.chemical_symbol);

    printf("Element Class: ");
    scanf("%s", element.class);

    printf("Element Atomic Number: ");
    scanf("%d", &element.atomic_number);

    printf("Element Atomic Weight: ");
    scanf("%lf", &element.atmoic_weight);

    printf("Element Electrons: ");
    scanf("%p", &element.electrons);

    return(element);
}
printf("Element Name: ");
scanf("%s", element.name);

您必須例如通過使用mallocelement.name指向的對象分配內存。 沒有適當的分配, element.name是無效的指針。

您沒有分配足夠的內存來嘗試讀入您的字符串。

順便說一句,您的上一個scanf很奇怪:您真的要問一個地址嗎? 可能很危險。

您需要分配內存。 最好的方法(肯定是最簡單的方法 !)也許就是簡單地將結構定義為具有字符數組(而不是字符指針)。

例:

#define MAX_STRING 80
#define MAX_ELECTRONS 32

typedef struct {
    char    name[MAX_STRING];
    char    chemical_symbol[MAX_STRING];
    char    class[MAX_STRING];
    int     atomic_number;
    double  atmoic_weight;
    int     electrons[MAX_ELECTRONS];
} element_t;

在掃描字符串之前,應為它們分配一些空間。 例如:

void initialize( element_t * p ) {
  p->name = malloc( sizeof( char ) * MAXSIZE );
  p->chemical_symbol = malloc( sizeof( char ) * MAXSIZE );
  p->class = malloc( sizeof( char ) * MAXSIZE );
}

在調用scan_element之前,請調用initialize 我敢肯定它將正確編譯。

暫無
暫無

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

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