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
做這些,但結果完全相同。
'sizeof'給你的對象*類型*的大小,分配的內存區域的不是大小(你不能檢索通過標準後手段)。 'sizeof'是一個純粹的編譯時構造。 sizeof(服務器)'(或者'sizeof server'像某些人會告訴你的那樣)總是將*指針的大小返回給struct *(在64位機器上通常是8個字節)。 – dhke
@dhke'sizeof'可以在運行時解析,例如。 'scanf(「%d」,&x); char ch [x]; printf(「%zu」,sizeof ch);'。(儘管OP沒有使用這樣的構造) –
@MM這實際上是否支持?使它*通常在編譯時解決,只有... *。謝謝你的提高 – dhke