所以我必須用C編寫一個vector
式的數據結構,一般來說,我犯了這樣的結構:初始化C結構通過函數
struct Vector
{
int length;
int *elements;
};
而且功能這樣的:
void initialize_vector(struct Vector* vector);
void create_vector(struct Vector* vector, int* array, int n);
void remove_vector(struct Vector* vector);
void vector_add_element(struct Vector* vector, int element);
void vector_insert(struct Vector* vector, int index, int element);
void vector_remove_element(struct Vector* vector, int element);
void vector_remove_at(struct Vector* vector, int index);
現在,initialize_vector()
函數,我想它只是初始化矢量屬性爲默認值(如length
到0和*elements
爲NULL)。我寫的是這樣的:
void initialize_vector(struct Vector* vector)
{
vector->elements = NULL;
vector->length = 0;
}
我想檢查是否正常工作,所以我寫了這段代碼:
#include <stdio.h>
#include "vector.h"
int main(int arc, char** argv)
{
struct Vector* vec;
initialize_vector(vec);
printf("%d\n", vec->length);
return 0;
}
我得到了著名Segmentation fault
,所以我查了GDB,和當然,當一切都擰緊了這一行:vector->elements = NULL;
。
我不知道問題出在哪裏。我宣佈了一個矢量,我猜想它正確地傳遞給它,並且它弄得一團糟。我知道這可能是微不足道的,我會被一些超級計算機專家大大降低,但是,嘿,他沒有任何問題沒有任何問題。
1:更改'結構矢量* VEC;'到'結構向量VEC;''initialize_vector(VEC);'到'initialize_vector(&vec);'將指針傳遞函數的結構 2:創建一個實例來一個帶有malloc()的Vector – Grifplex
沒有爲'struct'分配內存 –
「我聲明瞭一個向量」 - 不!你聲明並定義了一個**指針**給struct Vector,指針不是相同類型它指向詳細信息可在編程關鍵「當一切都搞砸了是這條線的那一刻......」 - !你搞砸了更早的編譯器警告是因爲好玩啓用他們,並留意 – Olaf