动态扩展结构体数组



我正在(尝试)用c编写一个服务器端守护进程,它接受来自客户机的连接。我需要一个结构体来保存每个打开的连接的信息,所以我创建了一个我定义的结构体的数组,并使用realloc动态地调整它的大小。

我的问题是在数组中创建结构体。我一直得到这个错误:

test.c:41: error: conversion to non-scalar type requested

我做错了什么?

我花了大部分时间在PHP上,是一个c的新手。我意识到我犯了一些简单的,初学者的错误(换句话说,请随意取笑我)。如果我做了什么蠢事,请告诉我。我把宝贵的时间都花在了谷歌上,但还没弄明白。我以较小的规模复制了这个问题,如下:

这是我的测试。

typedef struct test_ test;
c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "test.h"
//define the struct
struct test_ {
    int id;
    char *ip;
    int user;
    char *str;
};
//yes, the list needs to be global
test *test_list;

//
// add an item to the global list
//
int add(int id, char *ip, int size)
{
    //
    // increment size
    if(id>size) {
        size = id;
        //try to expand the list
        test *tmp = realloc(test_list,size);
        if(tmp) {
            //it worked; copy list back
            test_list = tmp;
        } else {
            //out of memory
            printf("could now expand listn");
            exit(1);
        }
    }
    //
    // HERE IS THE TROUBLE CODE::
    test_list[id] = (struct test)malloc(sizeof(test)+(sizeof(int)*5)+strlen(ip)+1);
    test_list[id].id = id;
    test_list[id].ip = malloc(strlen(ip));
        strcpy(test_list[id].ip,ip);
    test_list[id].user = 0;
    test_list[id].str = NULL;
}
//
// main
//
int main(void)
{
    //initialize
    int size = 1;
    test_list = malloc(size*sizeof(test));
    //add 10 dummy items
    int i;
    for(i=0; i<10; i++) {
        size = add(i, "sample-ip-addr", size);
    }
    //that's it!
    return 0;
}

尝试更改

test *tmp = realloc(test_list,size);

test *tmp = realloc(test_list,size*sizeof(test));

然后删除

test_list[id] = (struct test)malloc(sizeof(test)+(sizeof(int)*5)+strlen(ip)+1);

当你为test_list分配时,已经为每个分配的结构体成员分配了空间,所以你不需要再做一次。你只需要为结构体

中的指针进行分配

从'malloc'返回的值是您已经分配的内存地址。不能将其强制转换为结构体。这到底是什么意思?

你想要这样的东西:test_list=realloc(test_list, num_alloc * sizeof(test_));

相关内容

  • 没有找到相关文章

最新更新