亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: nbaloverme
打印 上一主題 下一主題

[C]void指針賦值后,地址值發(fā)生了變化 [復(fù)制鏈接]

論壇徽章:
0
11 [報(bào)告]
發(fā)表于 2011-09-28 09:44 |只看該作者
回復(fù) 9# nbaloverme


    那就費(fèi)解了。我再想想
    順便說一下
   fprintf(stderr, "queue address: %p\n",my queue);
   多寫了一個(gè)空格,不過這個(gè)和你的那個(gè)問題似乎應(yīng)該沒什么關(guān)系

論壇徽章:
0
12 [報(bào)告]
發(fā)表于 2011-09-28 09:45 |只看該作者
myqueue是static

論壇徽章:
0
13 [報(bào)告]
發(fā)表于 2011-09-28 10:06 |只看該作者
回復(fù) 11# KBTiller


    寫這個(gè)帖子時(shí)編輯錯(cuò)誤,多打了個(gè)空格。

論壇徽章:
0
14 [報(bào)告]
發(fā)表于 2011-09-28 10:07 |只看該作者
回復(fù) 12# deadlylight


    和這個(gè)沒有關(guān)系,改成非static變量也一樣。

論壇徽章:
0
15 [報(bào)告]
發(fā)表于 2011-09-28 10:30 |只看該作者
回復(fù)  KBTiller


    寫這個(gè)帖子時(shí)編輯錯(cuò)誤,多打了個(gè)空格。
nbaloverme 發(fā)表于 2011-09-28 10:06




這就說明帖子里的code和實(shí)際的不是完全相同,不是你直接復(fù)制下來的
問題往往就在你沒注意到的細(xì)節(jié)

論壇徽章:
0
16 [報(bào)告]
發(fā)表于 2011-09-28 10:43 |只看該作者
貼二段運(yùn)行時(shí)的輸出吧,第一個(gè)是正常運(yùn)行,第二個(gè)是運(yùn)行時(shí)出現(xiàn)段錯(cuò)誤。
queue address: (nil)
queue address is 0x12a8710
queue address: 0x12a8710

queue address: (nil)
queue address is 0x2aaaac008680
queue address: 0xffffffffac008680


在較高地址時(shí)經(jīng)過賦值后地址值就變了,高位全部置為F。
每次運(yùn)行結(jié)果都這樣。

論壇徽章:
0
17 [報(bào)告]
發(fā)表于 2011-09-28 12:34 |只看該作者
本帖最后由 雨過白鷺洲 于 2011-09-28 12:36 編輯

回復(fù) 3# nbaloverme


Sorry, 是我沒看仔細(xì)。。

  1. void* queue_new(uint32_t size) {
  2.         queue *q = NULL;
  3.         q = (queue*)malloc(sizeof(queue));
  4.         passert(q);
  5.         q->head = NULL;
  6.         q->tail = &(q->head);
  7.         q->elements = 0;
  8.         q->size = 0;
  9.         q->maxsize = size;
  10.         q->freewaiting = 0;
  11.         q->fullwaiting = 0;
  12.         if (size) {
  13.                 eassert(pthread_cond_init(&(q->waitfull),NULL)==0);
  14.         }
  15.         eassert(pthread_cond_init(&(q->waitfree),NULL)==0);
  16.         eassert(pthread_mutex_init(&(q->lock),NULL)==0);
  17.         fprintf(stderr,"queue address is %p\n",q);
  18.         return (void*)q;
  19. }

  20. static void *myqueue;
  21. fprintf(stderr, "queue address: %p\n",my queue);
  22. myqueue = (void *)queue_new(0);   // 我懷疑這里沒找到queue_new()函數(shù)的原型聲明,編譯器將函數(shù)的返回值默認(rèn)為int;
  23.                               // 此時(shí)已經(jīng)發(fā)生了截?cái),?4位指針截?cái)酁?2位的int。然后你再將int強(qiáng)制轉(zhuǎn)換為(void*),于是高32位全部置為FF
  24. fprintf(stderr, "queue address: %p\n", myqueue);
復(fù)制代碼
樓主你試下是不是這個(gè)原因

另外太多的強(qiáng)制轉(zhuǎn)換,不是好的編程習(xí)慣,因?yàn)檫@樣會(huì)把許多編譯器警告屏蔽,導(dǎo)致非常微妙的錯(cuò)誤。

論壇徽章:
0
18 [報(bào)告]
發(fā)表于 2011-09-28 13:22 |只看該作者
+1
回復(fù) 17# 雨過白鷺洲

論壇徽章:
0
19 [報(bào)告]
發(fā)表于 2011-09-28 13:32 |只看該作者
感覺象是內(nèi)存分頁引起的,linux下的LWP線程在內(nèi)核中分配一個(gè)TASK,每個(gè)TASK中堆棧的起始地址不同,這樣可能造成樓主那種情況發(fā)生吧? 最好顯示下程序中堆棧內(nèi)存分布。

論壇徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技術(shù)圖書徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44雙子座
日期:2013-12-27 12:32:29雙子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
20 [報(bào)告]
發(fā)表于 2011-09-28 13:44 |只看該作者
17樓是對(duì)的,仔細(xì)看看LZ運(yùn)行正確的情況和出現(xiàn)段錯(cuò)誤的情況:

0x12a8710 時(shí)轉(zhuǎn)換為int型后在轉(zhuǎn)換為void*可以保持不變,因?yàn)?x12a8710作為int型值是個(gè)正數(shù),所以轉(zhuǎn)換為void*這種無符號(hào)數(shù)時(shí)高位是全填的0。

0x2aaaac008680進(jìn)行截?cái)嗪笞鳛閕nt型值就是個(gè)負(fù)數(shù)了(0xac008680最高位為1),轉(zhuǎn)換為void*就高位全填1了。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP