由于我对分配指针的类型内存的理解不够,下面的调用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