gpt4 book ai didi

c - C 中 char ** 指针的内存分配

转载 作者:行者123 更新时间:2023-11-30 20:56:27 24 4
gpt4 key购买 nike

我必须维护一个字符串数组,其中每个字符串将包含邻居的 IP 地址。由于某种原因,我需要将它们维护为字符串。

 typedef struct _neighbors
{
int num_neigbors;
char **neighbor_address;
} neighbors;

假设我有两个邻居要添加。

我将 char ** neighbor_address 视为 char * 指针数组。

我知道我需要为 neighbor_address[0]neighbor_address[1] 分配内存来存储它们的 IP 地址。由于 IP 地址的形式为“x.y.z.w”,我将执行 7*sizeof (char)malloc

我的疑问是我应该为基本char **neighbor_address分配多少内存。是否应该是4个字节,以便可以存储neighbor_address[0]基指针的IP地址?

我这么说是因为如果我不按如下方式执行malloc,我会收到SIGSEGV(段错误):

neighbor_address = malloc (1, sizeof (char *));

我缺少什么吗?

最佳答案

你不应该像这样做malloc-

neighbor_address = malloc (1, sizeof (char *));

您在这里没有遵循 malloc 的语法。这是calloc的语法。如果您使用calloc,您可以使用此方法-

neighbor_address = calloc (n, sizeof (char *));

如果您想使用malloc请尝试以下更改-

neighbor_address = (char **)malloc (n * sizeof (char *));
for(i=0;i<n;i++)
neighbor_address[i] = (char *)malloc (8 * sizeof (char));

但是你在这里使用结构。所以需要使用箭头运算符为char **neighbor_address;分配内存,因为它是指针类型。试试这个-

neighbors -> neighbor_address = (char **)malloc (n * sizeof (char *)); // n -> no of ip addresses
for(i=0;i<n;i++)
neighbors -> neighbor_address[i] = (char *)malloc (8 * sizeof (char));

关于c - C 中 char ** 指针的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25282318/

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