gpt4 book ai didi

c - 带有指针和数组的 typedef 结构

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:17 26 4
gpt4 key购买 nike

 #include <stdio.h>
#define DEFAULT_CAPACITY 5

这是我的 typedef'ed 结构 - 我不能更改它。

typedef struct Vector
{
int items[DEFAULT_CAPACITY];
int size;
}*VectorP;

*VectorP 已经是一个让我很困惑的指针。

接下来我初始化 vector ,调用 malloc

void initVector(VectorP vector)
{
vector = (VectorP)malloc(DEFAULT_CAPACITY * sizeof(VectorP));

if(vector == NULL)
{
fprintf(stderr, "Memory allocation failed!\n");
exit(1);
}

(*vector).size = 0; //Does this change the size on the main function?
vector->items[0] = 1; // And this one too?
}

这是我的主要功能:

int main()
{
// Create a new vector ... check size
struct Vector vector;
VectorP v1 = &vector;
initVector(v1);
fprintf(stderr, "\nThe size is (0) %i\n", v1->size);

printf("items[0] = %i ", v1->items[0]);
}

问题是函数 initVector 没有改变大小或项目。我将如何更改在 main 中创建的 vector 的大小?

最佳答案

在函数 initVector 中,你为 vector 分配了内存,这会覆盖它之前的值(传入的参数),所以它不会修改 `main.vector这也意味着这里存在内存泄漏。

要修复它,只需删除 initVector 中的内存分配行即可。

void initVector(VectorP vector)
{
vector->size = 0; //the same as (*vector).size
vector->items[0] = 1;
}

关于c - 带有指针和数组的 typedef 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25690587/

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