- 論壇徽章:
- 0
|
本帖最后由 雨過白鷺洲 于 2011-09-28 12:36 編輯
回復(fù) 3# nbaloverme
Sorry, 是我沒看仔細(xì)。。
- void* queue_new(uint32_t size) {
- queue *q = NULL;
- q = (queue*)malloc(sizeof(queue));
- passert(q);
- q->head = NULL;
- q->tail = &(q->head);
- q->elements = 0;
- q->size = 0;
- q->maxsize = size;
- q->freewaiting = 0;
- q->fullwaiting = 0;
- if (size) {
- eassert(pthread_cond_init(&(q->waitfull),NULL)==0);
- }
- eassert(pthread_cond_init(&(q->waitfree),NULL)==0);
- eassert(pthread_mutex_init(&(q->lock),NULL)==0);
- fprintf(stderr,"queue address is %p\n",q);
- return (void*)q;
- }
- static void *myqueue;
- fprintf(stderr, "queue address: %p\n",my queue);
- myqueue = (void *)queue_new(0); // 我懷疑這里沒找到queue_new()函數(shù)的原型聲明,編譯器將函數(shù)的返回值默認(rèn)為int;
- // 此時(shí)已經(jīng)發(fā)生了截?cái),?4位指針截?cái)酁?2位的int。然后你再將int強(qiáng)制轉(zhuǎn)換為(void*),于是高32位全部置為FF
- fprintf(stderr, "queue address: %p\n", myqueue);
復(fù)制代碼 樓主你試下是不是這個(gè)原因
另外太多的強(qiáng)制轉(zhuǎn)換,不是好的編程習(xí)慣,因?yàn)檫@樣會(huì)把許多編譯器警告屏蔽,導(dǎo)致非常微妙的錯(cuò)誤。 |
|