我有一个启动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: %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
做这些,但结果完全一样。
发布于 2016-01-21 17:03:16
sizeof(server)
将给出指针的大小,而不是数组的总大小。
它依赖于实现(在你的例子中是8个字节)
https://stackoverflow.com/questions/34919221
复制相似问题