C 带指针和数组的typedef结构

C 带指针和数组的typedef结构,c,arrays,pointers,struct,typedef,C,Arrays,Pointers,Struct,Typedef,*VectorP已经是一个让我很困惑的指针了 接下来我初始化向量,调用malloc typedef struct Vector { int items[DEFAULT_CAPACITY]; int size; }*VectorP; 这是我的主要功能: void initVector(VectorP vector) { vector = (VectorP)malloc(DEFAULT_CAPACITY * sizeof(VectorP)); if(ve

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

接下来我初始化向量,调用malloc

typedef struct Vector
{
   int items[DEFAULT_CAPACITY];
   int size;   
}*VectorP;
这是我的主要功能:

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?
 }

问题是函数initVector没有更改大小或项。如何更改在main中创建的向量的大小?

在函数
initVector
中,您为
vector
分配了内存,这将覆盖其先前的值(传入的参数),因此它不会修改`main中的
vector
。这也意味着这里有内存泄漏

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

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]);        
}

我认为您的问题是,在使用
struct Vector创建结构之后,您正在重新分配结构
c知道如何在结构中创建简单的东西,比如基本的int和chars,以及具有预定义长度的int数组,比如
int items[DEFAULT_CAPACITY]


因此,在main中实例化init函数之后,您正在init函数中创建一个新结构。正如余浩建议的那样,只需删除init函数中的内存分配,它就应该可以工作。

当您在main中定义向量时,如下所示:

void initVector(VectorP vector)
{
     vector->size = 0;       //the same as (*vector).size
     vector->items[0] = 1;   
}
这意味着您已经在程序堆栈中为此结构分配了空间。因此,根本不需要在函数
initvector
中再次分配内存。这就是问题的根源

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