Обнаружение ошибки указателя - PullRequest
0 голосов
/ 08 сентября 2010
typedef struct car car_t;
struct Car {
   int carID[QUEUE_SIZE];
   int f[QUEUE_SIZE];
};
int main (){
 int Array[ARRIVAL_QUEUE_SIZE];
 car_t *ddd = (car_t*)malloc(sizeof(car_t));
   for(int i =0; i<2; i++){
        int carid = ((CARID_NUMBER_MIN)+(int)((double)(NUMBER_MAX-NUMBER_MIN+1)*rand()/(RAND_MAX+1.0)));    
 Array[i] = carid;
 ddd-> carID[i] = Array[i];
 ddd-> f[i] = Array[i];
   }

}

он жалуется на разыменование указателя на неполный тип и неправильное применение «sizeof» к неполному типу «car_t»

Ответы [ 3 ]

5 голосов
/ 08 сентября 2010

Ну, это потому, что car_t относится к struct car, который равен неполного типа.

Вы уверены, что не имели в виду struct Car (с заглавной буквы 'C')?

sizeof(car_t) не будет известен в вызове malloc, поскольку вы не указали, что на самом деле внутри этой структуры.

Стандарт ISO C (C99, 6.2.5) определяет неполные типы как типы, которые «описывают объекты, но не имеют информации, необходимой для определения их размеров». Это именно то, что у вас есть в этой ситуации.

0 голосов
/ 08 сентября 2010

Чтобы исправить вашу ошибку, пишите заглавную букву 'c' в вашем автомобиле:

typedef struct Car car_t;

Это скомпилировано для меня:

#include <stdlib.h>

typedef struct Car car_t;

static const int QUEUE_SIZE = 10;
static const int ARRIVAL_QUEUE_SIZE = 10;
static const int CARID_NUMBER_MIN = 10;
static const int NUMBER_MAX = 10;
static const int NUMBER_MIN = 0;

struct Car {
  int carID[QUEUE_SIZE];
  int f[QUEUE_SIZE];
};

int main (){
  int Array[ARRIVAL_QUEUE_SIZE];
  car_t *ddd = (car_t*)malloc(sizeof(car_t));

  for(int i =0; i<2; i++){
    int carid = ((CARID_NUMBER_MIN)+(int)((double)(NUMBER_MAX-NUMBER_MIN+1)*rand()/(RAND_MAX+1.0)));
    Array[i] = carid;
    ddd-> carID[i] = Array[i];
    ddd-> f[i] = Array[i];
  }

}
0 голосов
/ 08 сентября 2010

Я думаю, вам нужно использовать заглавную букву в вашем typedef.

typedef struct Car car_t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...