2016-01-21 63 views
0

我有一个启动rtsp服务器的小代码。在我启动特定的服务器之后,我添加了有关服务器的信息,例如其处理器ID(因为我将每个服务器作为子进程启动),它具有哪种源,端口和挂载点名称是一个struct数组我致电rtsp_server_list。我有一个static int server_count = 1在代码的开头,每增加一个新的服务器就增加1。所以我add_server()功能如下:malloc之后typedef的大小没有变化

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数组?我的结构如下:

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

我也有一个代码,通过终止其进程删除RTSP服务器,但我也不能更新,因为我想要的清单。那么我做错了什么?我试图用realloc做这些,但结果完全相同。

+2

'sizeof'给你的对象*类型*的大小,分配的内存区域的不是大小(你不能检索通过标准后手段)。 'sizeof'是一个纯粹的编译时构造。 sizeof(服务器)'(或者'sizeof server'像某些人会告诉你的那样)总是将*指针的大小返回给struct *(在64位机器上通常是8个字节)。 – dhke

+1

@dhke'sizeof'可以在运行时解析,例如。 'scanf(“%d”,&x); char ch [x]; printf(“%zu”,sizeof ch);'。(尽管OP没有使用这样的构造) –

+0

@MM这实际上是否支持?使它*通常在编译时解决,只有... *。谢谢你的提高 – dhke

回答

3

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

它是依赖于实现(在你的案件8个字节)