2014-09-05 186 views
0
#include <stdio.h> 
#define DEFAULT_CAPACITY 5 

這裏是我的typedef'ed結構 - 我不允許改變它。帶指針和數組的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並沒有改變大小或項目。我將如何改變在主要創建的向量中的大小?

回答

2

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

要修復它,只需刪除initVector中的內存分配行即可。

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

我覺得你的問題是你有struct Vector vector; C上創建後,您要重新分配的結構都知道,足以與具有預定長度如int數組一起創建,如基本的整數和字符結構簡單的事情int items[DEFAULT_CAPACITY];

所以發生了什麼是你正在你的init函數中創建一個新的結構後,你在主要實例化它。就像餘浩建議,只需在init函數中刪除內存分配,它應該可以工作。

0

當你像這樣定義你的主要載體:

struct Vector vector; 

這意味着你已經在這個結構中的程序堆棧中分配空間。所以根本不需要在函數initvector內再次分配內存。那是什麼導致了問題。