取消引用指针错误

时间:2010-09-08 05:40:38

标签: c

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 个答案:

答案 0 :(得分:5)

嗯,这是因为car_t指的是struct car 是一个不完整的类型。

您确定不是struct Car(大写'C')吗?

sizeof(car_t)调用中不会知道malloc,因为您尚未指定 内部的结构。

ISO C标准(C99,6.2.5)将不完整类型定义为“描述对象但缺少确定其大小所需信息”的类型。这正是你在这种情况下所拥有的。

答案 1 :(得分:0)

我认为你需要在你的typedef中大写汽车。

typedef struct Car car_t;

答案 2 :(得分:0)

要解决您的错误,请在您的typedef中大写“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];
  }

}