我正在使用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个元素?
答案 0 :(得分:2)
realloc
的第一个参数必须是先前通过调用malloc
,realloc
或calloc
或空指针返回的指针。在你的情况下,它不是任何一个。
答案 1 :(得分:1)
因为pollFd
是数组类型,所以你不能为它指定任何东西。
更改
struct pollfd pollFd[NRCONNECTIONS];
到
struct pollfd *pollFd;