2016-01-21 65 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個字節)