gpt4 book ai didi

c - malloc 之后 typedef 的大小没有改变

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:55 27 4
gpt4 key购买 nike

<分区>

我有一个启动 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 执行这些操作,但结果完全相同。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com