簡體   English   中英

嘗試訪問動態指針數組(C)時為SIGSEV

[英]SIGSEV when trying to access dynamic array of pointers (C)

當scanf嘗試訪問titolo [i]-> nome時出現錯誤,但我不明白為什么

typedef struct tit *TITOLO;

struct tit {
    char nome[20];
};

int main()
{
    TITOLO *titolo;
    titolo =(TITOLO *) malloc(4*sizeof (TITOLO));
    if (titolo == NULL) exit(1);
    int i;
    for (i=0;i<4;i++) {
        printf("Insert title: ");
        scanf("%s", titolo[i]->nome);
    }
    return 0;
}

typedef struct tit *TITOLO; 將TITOLO定義為指針類型,而不是結構類型。 擺脫這種情況,而改用typedef結構:

typedef struct {
    char nome[20];
} TITOLO;

TITOLO* titolo = malloc(4*sizeof(*titolo));

您可能想要這樣:

typedef struct tit *TITOLO;

struct tit {
  char nome[20];
};

int main()
{
  TITOLO titolo;
  titolo = (TITOLO)malloc(4 * sizeof(struct tit));
  if (titolo == NULL) exit(1);
  int i;
  for (i = 0; i < 4; i++) {
    printf("Insert title: ");
    scanf("%s", titolo[i].nome);
  }
  return 0;
}

TITOLO已經是指針類型。

但是最好的方法是按照Lundin的答案和乘以投票意見的注釋所建議的那樣做:不要將指針類型隱藏在typedef后面,而只會增加混亂。

順便說一句:

... = (TITOLO)malloc(...

可以寫成:

... = malloc(...

演員完全沒有必要。

暫無
暫無

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

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