gpt4 book ai didi

c - 在C中使用双指针在结构数组中分配内存

转载 作者:太空狗 更新时间:2023-10-29 15:48:24 24 4
gpt4 key购买 nike

下面是使用双指针填充 struct R 数组的示例代码。我无法为 r[0] 分配内存,而且当函数退出时,rr[0] 都变成了 0x0

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct R
{
int x;
int y;
char * z;
};

void func(struct R **r)
{
r = (struct R **) malloc(4 * sizeof(struct R *));
r[0] = (struct R *) malloc(sizeof(struct R)); // giving r[0] = 0x0
r[0]->x = 1;
r[0]->y = 2;
r[0]->z = (char *) malloc(64 * sizeof(char));
strcpy(r[0]->z , "HELLO");
}

int main()
{
struct R *r = NULL;
func(&r);
printf("%d", r->x);
printf("%d", r->y);
printf("%s", r->z);
return 0;
}

我无法找到背后的原因。任何帮助将不胜感激。

最佳答案

线

r = (struct R **) malloc(4 * sizeof(struct R *));

更改 r 指向的位置,但仅限于函数的局部。它不会改变调用函数中指针的值。

你需要的是:

void func(struct R **r)
{
*r = malloc(sizeof(struct R));

r[0]->x = 1;
r[0]->y = 2;
r[0]->z = malloc(64 * sizeof(char));
strcpy(r[0]->z , "HELLO");
}

另一种选择是将 func 的返回值更改为指针,使其更易于使用。

struct R * func()
{
struct R *r = malloc(sizeof(*r));

r->x = 1;
r->y = 2;
r->z = malloc(64 * sizeof(char));
strcpy(r->z , "HELLO");

return r;
}

并在 main 中使用它作为:

struct R *r = func();

附注请参阅Do I cast the result of malloc?理解为什么你不应该强制转换 malloc 的返回值。

关于c - 在C中使用双指针在结构数组中分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49569612/

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