由於我對分配指針的類型內存的理解不夠,下面的調用barrier_create會導致總線錯誤(「hi」從不打印)。C malloc通過函數調用指針導致總線錯誤
typedef struct barrier barrier_t;
typedef struct barrier *barrier_p;
barrier_p test_barrier_p;
int main(int argc, char *argv[]) {
barrier_create(*test_barrier_p);
}
int barrier_create(barrier_p *barrier_pointer) {
printf("hi\n");
barrier_p old_barrier, new_barrier;
int count;
old_barrier = (barrier_p) *barrier_pointer;
new_barrier = (barrier_p) malloc(sizeof(*new_barrier));
count = pthread_mutex_init(&new_barrier->lock, NULL);
new_barrier->is_valid = VALID_BARRIER;
new_barrier->counter = 0;
new_barrier->release_flag = 0;
*barrier_pointer = new_barrier;
return HAPPY_HAPPY_JOY_JOY;
}
我錯過了什麼或錯誤輸入?
作爲一個小挑逗:你通常不會「分配指針」。您分配存儲空間或內存,然後獲得指向該內存的指針。 – unwind 2009-04-16 07:55:26
謝謝放鬆。這是一個有用的排名,我轉換了我的措辭以反映我的理解。 – Noel 2009-04-16 13:12:56
這不是你的問題的答案,但一般來說你可能應該避免做像`typedef struct barrier * barrier_p`這樣的東西。只需使用'barrier_t *`。從長遠來看,它會減少混淆,'const barrier_t *`和`const barrier_p`不會是一回事。 – jamesdlin 2010-01-17 20:00:30