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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3271 | 回復(fù): 12
打印 上一主題 下一主題

今天遇到一個指針的問題一直不明白,請達人講解一下 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-12-13 21:13 |只看該作者 |倒序瀏覽
今天遇到一個問題,程序大概是這樣的:

void fun(unsigned int *t)
{
          *t=1;
}

int main(void)
{
          unsigned short i;

          fun(&i);

          printf("%d\n", i);//結(jié)果是0;

       return 0;
}

我是在VXWORKS上運行的,CPU是PPC。
原因我一直沒想明白,不過應(yīng)該是跟字節(jié)序有關(guān)系。
有高人能將原因?qū)⒚靼c嗎!

論壇徽章:
0
2 [報告]
發(fā)表于 2007-12-13 21:15 |只看該作者
溢出了。。。

論壇徽章:
0
3 [報告]
發(fā)表于 2007-12-13 21:21 |只看該作者
[root@mylinux c]# gcc temp.c
tt.c: In function `main':
tt.c:10: warning: passing arg 1 of `fun' from incompatible pointer type
[root@mylinux c]# ./a.out
1
[root@mylinux c]# uname -a
Linux mylinux 2.6.9-5.EL #1 Wed Jan 5 19:22:18 EST 2005 i686 athlon i386 GNU/Linux

論壇徽章:
0
4 [報告]
發(fā)表于 2007-12-13 22:22 |只看該作者
1)你的函數(shù)入?yún)⑹菬o符號int指針,4個字節(jié),而你實際填的是2個字節(jié)的無符號short型。
2)由于ppc是大端序,所以沒有把1寫到無符號short的內(nèi)存中,而是下2個字節(jié)(踩了棧的內(nèi)存)。
3)函數(shù)返回后,內(nèi)容還是原來的值。
4)而x86是小端,1被寫到了無符號short的內(nèi)存,因此沒有暴露出問題。

論壇徽章:
0
5 [報告]
發(fā)表于 2007-12-13 22:57 |只看該作者
貌似LS是牛人

論壇徽章:
0
6 [報告]
發(fā)表于 2007-12-13 23:21 |只看該作者
原帖由 mantiser 于 2007-12-13 22:22 發(fā)表
1)你的函數(shù)入?yún)⑹菬o符號int指針,4個字節(jié),而你實際填的是2個字節(jié)的無符號short型。
2)由于ppc是大端序,所以沒有把1寫到無符號short的內(nèi)存中,而是下2個字節(jié)(踩了棧的內(nèi)存)。
3)函數(shù)返回后,內(nèi)容還是原 ...


其實無論大端小端,fun中都執(zhí)行了對大小為4個字節(jié)的內(nèi)存的賦值操作,因此也都存在內(nèi)存越界訪問的隱患。樓主可以把main()中的

unsigned short i;

修改成

char c1 = 'A';
char c2 = 'B';
unsigned short i;
char c3 = 'C';
char c4 = 'D';

然后在跑完func()之后看看c1/c2/c3/c4變成啥樣子就大概能了解了。

論壇徽章:
0
7 [報告]
發(fā)表于 2007-12-14 09:08 |只看該作者
樓上的辦法可能不行,因為可能會存在自動的字節(jié)對齊。

論壇徽章:
0
8 [報告]
發(fā)表于 2007-12-14 09:19 |只看該作者
同意四樓,有些處理器高低位字節(jié)順序不一樣,在嵌入式程序中,應(yīng)盡量保持?jǐn)?shù)據(jù)類型一致,不一致時應(yīng)顯式強制轉(zhuǎn)換
六樓的測試也是個好方法,可以確認(rèn)一下這個問題

論壇徽章:
0
9 [報告]
發(fā)表于 2007-12-14 11:27 |只看該作者
之前是不確定的,假設(shè):
3333

函數(shù)內(nèi)賦值后
00000001

(紅色部分未分配內(nèi)存,外面看不到)

函數(shù)外那個就變成(紅色部分不是)
0000

論壇徽章:
0
10 [報告]
發(fā)表于 2007-12-15 19:04 |只看該作者
我測試的結(jié)果和3樓一樣的 能得出i=1???
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP