簡體   English   中英

動態陣列上的分段錯誤(核心轉儲)錯誤

[英]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.

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