首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在malloc之后,typedef的大小不变

在malloc之后,typedef的大小不变
EN

Stack Overflow用户
提问于 2016-01-21 16:58:04
回答 1查看 150关注 0票数 0

我有一个启动rtsp服务器的小代码。在我启动一个特定的服务器之后,我添加了关于服务器的信息,比如它的处理器id (因为我将每个服务器作为一个子进程启动),它有什么类型的源,端口和挂载点名称到一个我称为rtsp_server_list的结构数组中。我在代码的开头有一个static int server_count = 1,每当我添加一个新服务器时,它就会递增1。所以我的add_server()函数如下:

代码语言:javascript
运行
复制
struct rtsp_server_list* add_server() {

    char  *port, *mountName, *source;
    pid_t child_process_id;
    printf("Server count: %d\n", server_count);
    struct rtsp_server_list *server = malloc(server_count*sizeof(struct rtsp_server_list));
    printf("Size of server list: %lu\n", sizeof(server));

    source = malloc(256);
    port = malloc(256);
    mountName = malloc(256);
    g_print("Enter a source: ");
    scanf("%255s", source);
    g_print("Enter a port: ");
    scanf("%255s", port);
    g_print("Enter a mount name: ");
    scanf("%255s", mountName);
    child_process_id = fork();
    if (child_process_id < 0) {
        perror("Fork for child failed.\n");
    } else if (child_process_id == 0) {
        g_print("Child process... \n");         
        execl("/home/tunc/workspace/gstreamer_rtsp_server/Debug/gstreamer_rtsp_server", "/home/tunc/workspace/gstreamer_rtsp_server/Debug/gstreamer_rtsp_server", source, port, mountName, NULL);
    } else {
        g_print("Child created, child is running.\n");
    }
    server[server_count-1].source = strdup(source);
    server[server_count-1].mountName = strdup(mountName);
    server[server_count-1].port = strdup(port);
    server[server_count-1].process_id = child_process_id;
    server_count++;
    // wait a bit to not mess the console outputs.
    sleep(1);
    return server;
}

在上面的代码中,*server的大小从不改变,它始终保持在8字节。但是当我添加一个服务器时,server count会增加1,所以如果我碰巧添加了第二个服务器,*server的大小应该是16。是因为我没有在结构中为char数组分配内存吗?我的结构如下:

代码语言:javascript
运行
复制
struct rtsp_server_list {
    char *source;
    char *mountName;
    char *port;
    pid_t process_id;
} rtsp_server_list;

我还有一段代码,可以通过终止rtsp服务器的进程来删除它,但是我也不能以我想要的方式更新列表。那么我做错了什么呢?我试着用realloc做这些,但结果完全一样。

EN

回答 1

Stack Overflow用户

发布于 2016-01-21 17:03:16

sizeof(server)将给出指针的大小,而不是数组的总大小。

它依赖于实现(在你的例子中是8个字节)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34919221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档