typedef带有指针和数组的结构

时间:2014-09-05 16:52:25

标签: c arrays pointers struct typedef

 #include <stdio.h>
 #define DEFAULT_CAPACITY 5

这是我的typedef&#struct结构 - 我不允许更改此内容。

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

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

接下来我正在初始化向量,调用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中创建的向量中的大小?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

我认为你的问题是你在使用struct Vector vector;创建结构后重新分配结构c知道足够的结构,如基本的int和chars以及具有预定义长度的int数组的结构中的简单事物int items[DEFAULT_CAPACITY];

所以发生的事情是你在main函数中实例化后在init函数中创建一个新结构。就像Yu Hao建议只需删除init函数中的内存分配一样,它应该可以工作。

答案 2 :(得分:0)

在主体中定义矢量时,如下所示:

struct Vector vector;

这意味着您已经在此结构的程序堆栈中分配空间。因此,根本不需要在函数initvector内再次分配内存。这是导致问题的原因。