Realloc pollfd - 转换为非标量

时间:2014-06-21 15:25:55

标签: c malloc realloc

我正在使用poll功能。该库的结构如下:

struct pollfd{
   int fd;
   short events;
   short revents;
}

现在,在我的代码中,我有一个这些事件的数组,我需要能够重新分配并为更多项目提供更多的内存空间。这就是我目前所拥有的:

#define NRCONNECTIONS 10
#define STEPSIZE 5

struct pollfd pollFd[NRCONNECTIONS];

int main(void){
   void * temp;
   temp = realloc((void *)pollFd, (sizeof(pollFd)/sizeof(pollFd[0])) + STEPSIZE);
   if(temp != NULL){
    pollFd = (struct pollfd *)temp;
   }
}

现在,我似乎无法让if(temp != NULL)内的代码正确无误。没有演员,我不能这样做,因为那是不正确的。我无法使用(struct pollfd)强制转换,因为它是非标量的。像这样也行不通。是因为我的pollFd变量是在没有malloc()的情况下完成的,还是其他错误?

提前致谢。

更新

struct pollfd *pollFd;

pollFd = malloc(NRCONNECTIONS * sizeof(struct pollfd));
if(pollFd == NULL){
    printf("Error malloc\n");
    fflush(stdout);
    exit(0);
}

这应该是正确的初始化吗?然后我如何让它像一个数组?我的意思是,我如何访问例如第0个元素?

2 个答案:

答案 0 :(得分:2)

realloc的第一个参数必须是先前通过调用mallocrealloccalloc或空指针返回的指针。在你的情况下,它不是任何一个。

答案 1 :(得分:1)

因为pollFd是数组类型,所以你不能为它指定任何东西。

更改

struct pollfd pollFd[NRCONNECTIONS];

struct pollfd *pollFd;