C语言 typedef 的大小在 malloc 之后不会改变



我有一个启动rtsp服务器的小代码。启动特定服务器后,我将有关服务器的信息添加到服务器,例如其处理器ID(因为我将每个服务器作为子进程启动),它具有哪种源,端口和安装点名称到我称为rtsp_server_list的结构数组中。我在代码开头有一个static int server_count = 1,每当我添加新服务器时,它都会增加 1。所以我的add_server()函数如下:

struct rtsp_server_list* add_server() {
    char  *port, *mountName, *source;
    pid_t child_process_id;
    printf("Server count: %dn", server_count);
    struct rtsp_server_list *server = malloc(server_count*sizeof(struct rtsp_server_list));
    printf("Size of server list: %lun", 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数组分配内存吗?我的结构如下:

struct rtsp_server_list {
    char *source;
    char *mountName;
    char *port;
    pid_t process_id;
} rtsp_server_list;

还有一个代码,可以通过终止其进程来删除 rtsp 服务器,但我也无法以我想要的方式更新列表。那么我做错了什么?我尝试用realloc做这些,但结果完全相同。

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

它依赖于实现(在您的情况下为 8 个字节)

相关内容

  • 没有找到相关文章

最新更新