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