[英]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.