gpt4 book ai didi

C,具有多个动态分配数组的结构是否需要为每次分配调整大小?

转载 作者:行者123 更新时间:2023-12-02 15:52:21 25 4
gpt4 key购买 nike

下面我有一个包含多个动态分配的 char 数组的结构。

它可以编译,Valgrind 表明没有问题并且它按预期运行。

早些时候,有人试图向我解释我可能会遇到内存问题。他们的理由是,其中一个变量可能会超出为 foo 实例分配的传染性内存。

我是否应该在每次为它的变量分配内存时对 foo 执行 malloc?

Live Demo

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

typedef struct foo_t{
char *strA;
char *strB;
char *strC;
int x;
} foo;

int main() {

char *str1 = "Hello World";
char *str2 = "foo";
char *str3 = "Kolmongorov complexity";

foo *point = malloc(sizeof(foo));
point->x = 100000;

point->strA = calloc(strlen(str1)+1, sizeof(char));
point->strB = calloc(strlen(str2)+1, sizeof(char));
point->strC = calloc(strlen(str3)+1, sizeof(char));

strcpy(point->strA, str1);
strcpy(point->strB, str2);
strcpy(point->strC, str3);

free(point->strA);
free(point->strB);
free(point->strC);

free(point);

return 0;
}

最佳答案

在您的示例中,foo 结构并不真正包含数组:它包含指向数组的指针。

调整数组大小时,指针的大小保持不变,因此无需重新分配 foo 结构。

请注意,使用 realloc 调整数组大小可能会更改其内存地址,因此必须根据该地址重新分配 foo 结构中的指针。

关于C,具有多个动态分配数组的结构是否需要为每次分配调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72136295/

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