簡體   English   中英

結構分割錯誤的打印數組

[英]Printing array of struct Segmentation fault

我正在嘗試打印我的結構。 我希望它顯示:

id: BBB-188
brand: BMW
pic: 1 2 3. 

現在的結果是這樣的:

id: BBB-188 
name: BMW 
Segmentation fault: 11.

有人知道我的代碼有什么問題嗎?

#define MAX 10000
#define IDSIZE 11
#define BRANDSIZE 50
#define PICSIZE 10

typedef struct{
    char id[IDSIZE+1];
    char brand[BRANDSIZE+1];
    int *pic;
} Car;

void printCar(Car *pCar,int carcount, int imagecount) {  
    printf("id: %s \n",pCar->id);
    printf("brand: %s \n",pCar->brand);
    for(int i=0; i< imagecount; i++){
        printf("pic: %d \n",pCar->pic[i]);
    }
}

Car initCar(char itsId[],char itsBrand[],int itsPic, int     imagecount){
    Car newCar;
    strcpy(newCar.id, itsId);
    strcpy(newCar.brand, itsBrand);
    for (int i = 0; i < imagecount; i++){
        newCar.pic = itsPic;
    }
    return newCar;
}

int main(void){
    int carcount=0;
    int imagecount=0;

    int test[3]={1,2,3};

    Car myCar = initCar("BBB-188","BMW", test, 3 );

    carcount=1;
    imagecount=3;

    printCar(&myCar,carcount,imagecount);

    return 0;
}

pic的處理已損壞並且非常混亂。

您似乎想將其表示為整數數組,但不存儲長度。 因此,它必須始終為三個,但是您可以在結構中使用一個數組,即:

int pic[3];

代替

int *pic;

同樣initCar()的賦值沒有意義,您在循環,而只是將相同的整數值(!) imagecount指針imagecount次,就沒有數據被復制。

如果要使圖片數組的長度真正可變,則必須存儲長度並分配用於容納數字的內存。 因此,在initCar()您必須具有:

newCar.pic = malloc(imagecount * sizeof *newCar.pic);
memcpy(newCar.pic, itsPic, imagecount * sizeof *newCar.pic);

但是,它的itsPic當然必須是const int *類型。

您需要將itsPic作為指針傳遞itsPic initCar 如果這樣做,則不需要for循環來實現效果。

Car initCar(char itsId[],char itsBrand[],int* itsPic, int imagecount){
    Car newCar;
    strcpy(newCar.id, itsId);
    strcpy(newCar.brand, itsBrand);
    //for (int i = 0; i < imagecount; i++){
      newCar.pic = itsPic;
    //}
    return newCar;
}

暫無
暫無

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

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