簡體   English   中英

帶指針和數組的typedef結構

[英]typedef structs with pointers and arrays

 #include <stdio.h>
 #define DEFAULT_CAPACITY 5

這是我的typedef定義的結構-不允許更改。

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中創建的向量的大小?

在函數initVector ,您為vector分配了內存,這將覆蓋其先前的值(傳入的參數),因此它不會在`main中修改vector 這也意味着這里存在內存泄漏。

要解決此問題,只需刪除initVector中的內存分配行。

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

我認為您的問題是使用struct Vector vector;創建結構后,您將對其進行重新分配struct Vector vector; c有足夠的知識來在結構中創建簡單的東西,例如基本的int和chars以及具有預定義長度的int數組(例如int items[DEFAULT_CAPACITY];

因此,正在發生的是在main中實例化init函數后正在創建一個新結構。 就像Yu Hao所建議的那樣,只需刪除init函數中的內存分配,它就可以工作。

當您在主對象中定義矢量時,如下所示:

struct Vector vector;

這意味着您已經在程序堆棧中為此結構分配了空間。 因此,根本不需要在函數initvector再次分配內存。 那就是導致問題的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM