[英]segmentation fault (Core dumped) error on Dynamic array
我在嘗試構建動態數組時遇到了這個問題,我認為realloc函數之類的東西是我的錯,如果您能幫助我的話,將不勝感激。 我第一次可以輸入名稱,但是第二次我輸入時會出現問題
typedef struct {
char nom[30], prenom[20];
int age;
} ITEM;
void Lire(ITEM **items, int *nb_items)
{
int i = 0;
printf("* Entrer les donnees et taper . pour terminer\n\n");
for (i = 0; TRUE; i++)
{
ITEM *temp = (ITEM *) realloc(*items, ((i + 1) * sizeof(ITEM)));
if (temp == NULL)
{
free(*items);
printf("Il n'y a pas de memoire! \n");
exit (0);
}
*items = temp;
printf("> nom : ");
scanf("%s", (*items[i]).nom);
if ((*items[i]).nom[0] == '.')
break;
printf("> prenom : ");
scanf("%s", (*items[i]).prenom);
}
}
int main(int argc, char *argv[])
{
ITEM *items;
int nb_items=0;
items = (ITEM *) malloc(sizeof(ITEM));
if(items == 0)
{
printf("Il n'y a pas de memoire! \n");
exit (0);
}
Lire(&items, &nb_items);
free (items);
exit(0);
}
您的問題在於運算符的優先級: *items[i]
計算結果為items[i][0]
而您想要的是items[0][i]
,即:
(*items)[i]
數組下標訪問的綁定比*
更緊密。 這導致*items[i]
被解釋為*(items[i])
,例如在以下語句中:
scanf("%s", (*items[i]).nom);
所以items
被訪問,就好像它是指向數組ITEM
。 實際上,它是指向ITEM
結構數組的指針,應按以下方式訪問:
scanf("%s", (*items)[i].nom);
讓生活更輕松
*items = temp;
ITEM *current = &temp[i];
printf("> nom : ");
scanf("%s", current->nom);
...etc
使代碼更易於閱讀,並簡化了整個運算符的優先級isuuse
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.