我的編程樂園
積累,堅(jiān)持!
---------我是一只IT小小鳥
首頁
新隨筆
聯(lián)系
聚合
管理
隨筆-145 評(píng)論-173 文章-70 trackbacks-0
【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問【新的問題!】【各位繼續(xù)關(guān)注討論啊!】
最近突然發(fā)現(xiàn)自己曾經(jīng)建立的C++體系出現(xiàn)了很多漏洞,對(duì)很多問題都產(chǎn)生了疑問,不知道自己是鉆了牛角尖還是探究C++的底層或者細(xì)節(jié),不過既然碰到了,就解決之吧,或許在某一天之后,會(huì)驚奇的發(fā)現(xiàn),原來自己的這些問題會(huì)出現(xiàn)某天的筆試或者工作中呢。
言歸正傳,這個(gè)問題是關(guān)于new操作符的。今天在完成C++作業(yè)的時(shí)候,需要自己實(shí)現(xiàn)一個(gè)strlen來,其實(shí)就是調(diào)用C語言函數(shù)就可以,不過我突發(fā)奇想,寫下了下面的這個(gè)代碼:
code 1:
1
#include
<
iostream
>
2
using
namespace
std;
3
4
int
main()
5
{
6
char
*
str
=
new
char
[
4
];
7
strcpy(str,
"
fjifejfief
"
);
8
cout
<<
str
<<
endl;
9
}
code 2:
1
#include
<
iostream
>
2
using
namespace
std;
3
4
int
main()
5
{
6
char
*
str
=
new
char
[
5
];
7
strcpy(str,
"
Good
"
);
8
strcat(str,
"
I Love C++
"
);
9
cout
<<
str
<<
endl;
10
}
上面的兩個(gè)代碼都是用到了new操作符,動(dòng)態(tài)分配了一個(gè)固定的存儲(chǔ)空間,OK。
然后通過strcpy來實(shí)現(xiàn)賦值,從而將原來的那個(gè)分配的區(qū)域填充。可是在1和2中都有一個(gè)問題,那就是,填充的字符串超過了動(dòng)態(tài)分配的大小,在code1中,實(shí)際分配的只有4個(gè)字節(jié),而自己拷貝過去的確有10個(gè)字節(jié)(不含null),而code2中,首先初始化的時(shí)候沒有問題,后面的連接函數(shù)也是。為何我會(huì)產(chǎn)生這個(gè)問題呢?
因?yàn)樵?jīng)在《C++ Primer》一書中講到,當(dāng)進(jìn)行字符串操作的時(shí)候,需要特別注意到那個(gè)null要占用一個(gè)空間,而對(duì)于strcat和其他函數(shù),特別要注意是否超過表示的范圍,而我自己曾經(jīng)碰到過這個(gè)問題,所以比較疑惑,上面的那個(gè)沒有溢出嗎?為何可以輸出正確的結(jié)果呢?
下面,列出個(gè)錯(cuò)誤的例子來看看:
code3
1
#include
<
iostream
>
2
using
namespace
std;
3
4
int
main()
5
{
6
char
str[
4
]
=
"
goo
"
;
7
cout
<<
str
<<
endl;
8
strcat(str,
"
sfsfefe
"
);
9
cout
<<
str
<<
endl;
10
return
0
;
11
}
明顯code3會(huì)出錯(cuò)(剛開始的時(shí)候居然沒有出錯(cuò),后來程序才崩潰的,以為靈異事件呢。),固定分配的數(shù)組的話,需要特別注意像strcat函數(shù),因?yàn)檫@種連接函數(shù)就可能超過范圍,發(fā)生錯(cuò)誤。
ok:
匯總?cè)缦拢汗潭ǚ峙涞臅r(shí)候,不能夠超過數(shù)組的范圍,而且字符串的話需要注意總是有一個(gè)null在其中的,所以大小要自己把握好。
但是,對(duì)于new動(dòng)態(tài)分配的話,可以超過范圍,不管是strcat還是直接在分配的時(shí)候超過范圍都可以,Why?
============================================================================================================
經(jīng)過網(wǎng)友留言匯總,同時(shí)自己測(cè)試,發(fā)現(xiàn)了一些新的問題,也有了新的體會(huì)! Version 1
============================================================================================================
留言匯總(解答):
經(jīng)過和網(wǎng)友的討論,我初步了解了錯(cuò)誤可能的原因,現(xiàn)羅列如下,如有遺漏和錯(cuò)誤,還望各位指教。
1.兩者的分配方式不同。使用關(guān)鍵字new操作符分配的話,分配的空間是在堆當(dāng)中(heap),而直接使用數(shù)組的話,分配的空間在堆棧中(stack)。
2.操作。對(duì)于堆棧的溢出,由于變量的填充時(shí)按照從高地址到低地址的方式,所以,溢出的話會(huì)修改函數(shù)的返回值,造成運(yùn)行的錯(cuò)誤。而對(duì)于堆分配的話,這里即使溢出了,由于沒有對(duì)它進(jìn)行進(jìn)一步操作,所以沒有出現(xiàn)問題。
3
.我的一點(diǎn)理解。對(duì)于堆棧溢出的錯(cuò)誤,我想大家都知道了,可是上面的這個(gè)堆溢出的話,好像即使有錯(cuò)誤也沒有什么問題。我嘗試了使用
delete []str,或者是輸出str[8]等單元,都是顯示正確的結(jié)果,也沒有出現(xiàn)錯(cuò)誤。所以懷疑的是,難道堆上的這種分配這么安全,那我delete的話,到底是刪除的分配的4個(gè)字節(jié),還是拷貝過去的溢出的那個(gè)超過4個(gè)字節(jié)的那么多單元內(nèi)容呢?我的理解是,堆上分配的單元由于太隨意,靈活性太強(qiáng),所以對(duì)于錯(cuò)誤的發(fā)生就可能性很小。
4.
我寫的調(diào)試代碼的一個(gè)新的問題:
1
#include
<
iostream
>
2
using
namespace
std;
3
4
int
main()
5
{
6
char
*
str1
=
new
char
[
4
];
7
str1
=
"
sfe
"
;
//如果去掉這一行,那么程序就可以正常運(yùn)行了……可是這個(gè)僅僅是初始化指針的啊。
8
char
str2[
4
]
=
"
adf
"
;
9
cout
<<
"
賦值前:
"
<<
endl;
10
cout
<<
"
str1指向:
"
<<&
str1
<<
endl;
11
cout
<<
"
str1內(nèi)容:
"
<<
str1
<<
endl;
12
cout
<<
"
str2指向:
"
<<&
str2
<<
endl;
13
cout
<<
"
str2內(nèi)容:
"
<<
str2
<<
endl;
14
strcpy(str2,
"
ooo
"
);
15
cout
<<
"
str2先賦值后:
"
<<
endl;
16
cout
<<
"
str1指向:
"
<<&
str1
<<
endl;
17
cout
<<
"
str1內(nèi)容:
"
<<
str1
<<
endl;
18
cout
<<
"
str2指向:
"
<<&
str2
<<
endl;
19
cout
<<
"
str2內(nèi)容:
"
<<
str2
<<
endl;
20
strcpy(str1,
"
iiiiii
"
);
21
cout
<<
"
str1后賦值后:
"
<<
endl;
22
cout
<<
"
str1指向:
"
<<&
str1
<<
endl;
23
cout
<<
"
str1內(nèi)容:
"
<<
str1
<<
endl;
24
cout
<<
"
str2指向:
"
<<&
str2
<<
endl;
25
cout
<<
"
str2內(nèi)容:
"
<<
str2
<<
endl;
26
27
}
28
程序在運(yùn)行一半后崩潰,典型的溢出了。但是,此代碼如果去掉上面初始化的那一行,程序就沒有錯(cuò)誤,而且我這里還計(jì)算發(fā)現(xiàn)對(duì)于堆棧的話沒有任何錯(cuò)誤,而堆的話故意寫了個(gè)溢出的賦值,就是下面strcpy(str1,"iiiiii");
此時(shí)加上初始化的代碼后,問題就來了,上個(gè)截圖。
從錯(cuò)誤的信息來看,
就是指向到 strcpy(str1,"iiiiii")的時(shí)候出錯(cuò)了的。
這個(gè)說明:在我沒有對(duì)堆上的變量初始化的時(shí)候,如果越界了,沒有發(fā)現(xiàn)出錯(cuò)(它會(huì)自動(dòng)擴(kuò)展那個(gè)大小嗎?)。
而如果我對(duì)堆上的變量初始化的話,那么,再次復(fù)制的時(shí)候,如果越界了,就會(huì)發(fā)生錯(cuò)誤!
各位,知道為什么嗎?(
問題好像更明朗了些,而且好像更深入了些。當(dāng)然,鉆這個(gè)牛角尖或許沒有必要!)
posted on 2010-01-13 23:14
deercoder
閱讀(2198)
評(píng)論(23)
編輯
收藏
引用
評(píng)論:
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問[未登錄] 2010-01-14 00:54 |
Steven
你需要去了解下 堆(stack) 和 棧(heap) 的區(qū)別.
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 02:06 |
陳梓瀚(vczh)
因?yàn)閚ew的時(shí)候,系統(tǒng)可以選擇多給你幾個(gè)字節(jié),而且這并不是固定的數(shù)字。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 02:20 |
OwnWaterloo
1. 在C/C++代碼正確且C/C++實(shí)現(xiàn)(編譯器,運(yùn)行庫)正確的情況下, C/C++語言保證得到正確的結(jié)果。
如果出現(xiàn)了錯(cuò)誤的結(jié)果, 可以問why。
是"C/C++代碼正確"這個(gè)假設(shè)有誤? 還是"C/C++實(shí)現(xiàn)正確"這個(gè)假設(shè)有誤?
2. 如果C/C++代碼本身有某種錯(cuò)誤, C/C++實(shí)現(xiàn)不保證得到正確的結(jié)果, 也不保證得到錯(cuò)誤的結(jié)果, 更不保證會(huì)報(bào)告錯(cuò)誤的結(jié)果。
代碼的錯(cuò)誤有可能會(huì)被隱藏, 到其他時(shí)候發(fā)作。
這時(shí)候, 詢問"為什么沒有出現(xiàn)錯(cuò)誤", 是不明智的。
C/C++實(shí)現(xiàn)沒有義務(wù)保證產(chǎn)生一個(gè)錯(cuò)誤。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 09:22 |
bluegene
我是這樣理解的,你用 new 分配的空間是放在堆(heap)里的,超出了的空間如果不被其它數(shù)據(jù)覆蓋暫時(shí)是沒有問題的。固定分配的時(shí)候是在棧(stack)里分配的,其空間肯定是不能益處的。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 10:26 |
飯中淹
new分配的在堆里,你溢出了,只會(huì)導(dǎo)致堆出問題。而你下面又沒有再使用堆,所以不會(huì)出錯(cuò)。
直接寫的局部變量,分配在堆棧里,堆棧里有函數(shù)的返回地址,所以溢出了,覆蓋了返回地址,函數(shù)執(zhí)行完就出錯(cuò)了。
另外,有些 編譯器會(huì)生成對(duì)固定長(zhǎng)度數(shù)組的保護(hù)性檢測(cè)代碼,一旦溢出,就會(huì)彈出提示。早先在vs2003還是vs2002的時(shí)候見過。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 10:27 |
zuhd
對(duì)于堆來講,生長(zhǎng)方向是向上的,也就是向著內(nèi)存地址增加的方向;對(duì)于棧來講,它的生長(zhǎng)方向是向下的,是向著內(nèi)存地址減小的方向增長(zhǎng)。看下反匯編代碼一切都明白了
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 10:31 |
zuhd
棧里有函數(shù)的返回地址,所以溢出了,覆蓋了返回地址,函數(shù)執(zhí)行完就出錯(cuò)了。
==========================================
這句話是重點(diǎn),當(dāng)ret的時(shí)候,call下條指令時(shí)異常了,如果你多定義了幾個(gè)變量,讓棧溢出不到函數(shù)的返回地址,錯(cuò)誤依然不會(huì)出現(xiàn)的
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問[未登錄] 2010-01-14 12:43 |
vane
出錯(cuò)是必然的,沒問題的時(shí)候你比較幸運(yùn)。
#include <iostream>
using namespace std;
#pragma pack(push)
#pragma pack(1)
int main()
{
char *str = new char[5];
strcpy(str,"Good");
strcat(str,"I Love C++");
cout << str << endl;
}
#pragma pack(pop)
你可以這么試一下
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 15:53 |
壞人
越界,后果自負(fù)。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 15:57 |
turygo
數(shù)組越界都是這樣的,錯(cuò)誤不是立刻出現(xiàn),而是不知道什么時(shí)候就出問題了,而且到那個(gè)時(shí)候代碼量一大,你根本無從找起錯(cuò)誤。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 17:30 |
零宇
建議樓主補(bǔ)充一下基礎(chǔ)知識(shí)
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 19:22 |
besterChen
LZ遇到的問題是堆和棧溢出的問題,您說的可能是靈異事件是因?yàn)槌绦驅(qū):投褭z查導(dǎo)致的。
不知道LZ用的是什么開發(fā)環(huán)境。我學(xué)習(xí)C語言也剛好學(xué)到這里,自己在VC6得開發(fā)環(huán)境下仔細(xì)調(diào)試過其過程并做了筆記,地址:
http://www.shnenglu.com/besterChen/archive/2010/01/13/105538.html
希望能對(duì)樓主有幫助,由于自己也是初學(xué),希望LZ能多多指正日志中的錯(cuò)誤……
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 22:30 |
wildpointer
這種越界的事,你知道會(huì)錯(cuò)還用。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 23:21 |
劉暢
@Steven
好的,謝謝。我覺得也應(yīng)該是這方面的問題。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 23:22 |
劉暢
@陳梓瀚(vczh)
可是多出來的字節(jié)是無法預(yù)知的啊。而且如果太多的話還是會(huì)溢出的吧。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 23:25 |
劉暢
@bluegene
謝謝,之前一直覺得和內(nèi)存的分配有關(guān),堆棧和堆確實(shí)不大一樣。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 23:27 |
劉暢
@飯中淹
@zuhd
謝謝你們的精彩解釋,受益匪淺。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 23:29 |
劉暢
@besterChen
呵呵,一起學(xué)習(xí)!
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-14 23:29 |
劉暢
@零宇
好的,謝謝!
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-15 00:05 |
Benjamin
strcpy等在一些公司的編碼規(guī)范中是禁用的。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問 2010-01-15 00:55 |
空明流轉(zhuǎn)
bushuoshale...
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問[未登錄] 2010-01-15 09:47 |
Steven
@劉暢
呵呵,我把堆和棧的英文寫反了。。。
以前寫C 程序的時(shí)候經(jīng)常用到大量的 strcopy, strcat之類的函數(shù),偶爾出錯(cuò)是在所難免的,只要是人總是有算錯(cuò)的時(shí)候,尤其有些時(shí)候混合處理unicode和ansi串的時(shí)候,算字符串長(zhǎng)度是容易出錯(cuò)的。
所以后來寫 C++ 的時(shí)候我盡量避免去使用這類函數(shù)了,而是傾向于用 stl的string wstring, 盡量用 stl的容器類去代替自己分配管理內(nèi)存。
代碼規(guī)模大到一定程度,除了緩沖溢出實(shí)在是很難找。
順便說下,
http://www.coverity.com/products/static-analysis.html
這個(gè)東西很強(qiáng)大,可以檢測(cè)到你代碼里潛在的溢出問題。
回復(fù)
更多評(píng)論
#
re: 【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問
2010-01-15 12:43 |
劉暢
@Steven
謝謝,去看看,學(xué)習(xí)了……
回復(fù)
更多評(píng)論
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
堅(jiān)持記錄,筆耕不輟,筆記是最好的學(xué)習(xí)方法!
<
2010年1月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用鏈接
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(87)
ACM(1)
Android(4)
C++(7)
CTeX和LateX(1)
Git(3)
Java(4)
MFC程序設(shè)計(jì)入門(8)
OpenCV(1)
Python(3)
Shell/Bash(1)
SQL(1)
Unix/Linux(23)
Vim(3)
大學(xué)公開課(3)
讀書(4)
環(huán)境配置(1)
生活感悟/日記(18)
圖像識(shí)別算法及原理(1)
隨筆檔案
(145)
2014年12月 (1)
2013年3月 (1)
2012年7月 (2)
2012年6月 (5)
2012年5月 (2)
2012年4月 (2)
2011年12月 (1)
2011年11月 (2)
2011年10月 (8)
2011年9月 (2)
2011年8月 (4)
2011年6月 (2)
2011年5月 (5)
2011年4月 (3)
2011年3月 (3)
2010年6月 (5)
2010年5月 (5)
2010年4月 (3)
2010年3月 (16)
2010年2月 (56)
2010年1月 (11)
2009年12月 (2)
2009年11月 (3)
2009年10月 (1)
文章分類
(70)
C/C++(14)
JAVA(6)
Linux/Unix(6)
MFC(5)
OpenCV / OpenGL(6)
編程體會(huì)和收獲(3)
常見編譯器錯(cuò)誤解決辦法(5)
深入理解計(jì)算機(jī)系統(tǒng)(2)
生活的體會(huì)和感悟(5)
實(shí)習(xí)/讀研(1)
數(shù)據(jù)結(jié)構(gòu)和算法分析(9)
雜談(8)
文章檔案
(70)
2011年11月 (1)
2011年10月 (1)
2010年3月 (8)
2010年2月 (2)
2010年1月 (3)
2009年12月 (21)
2009年11月 (26)
2009年10月 (5)
2009年9月 (3)
相冊(cè)
computer picture
ACM與算法比賽
Google Code Jam
Top Coder
北大ACM
杭電ACM
LaTex和Tex學(xué)習(xí)
LaTex and Tex
Tex,LaTex,CTex學(xué)習(xí)
電子書下載
不錯(cuò)的電子書免注冊(cè)下載
雜志下載(經(jīng)濟(jì)學(xué)人等)
聯(lián)系方式
我的豆瓣主頁
學(xué)習(xí)論壇
C++編程
VC知識(shí)庫
超多C/C++資料和源碼下載
科研小木蟲
提問必答網(wǎng)站(牛人輩出啊!)
英語網(wǎng)站(長(zhǎng)期學(xué)習(xí))
New York Times
華爾街日?qǐng)?bào)
記單詞,捐大米
經(jīng)濟(jì)學(xué)英文網(wǎng)
普特網(wǎng)站
普特英語應(yīng)用(有趣的學(xué)習(xí))
譯言網(wǎng)|譯文庫
中國日?qǐng)?bào)
源碼網(wǎng)站
codeproject
google代碼搜索
programersheaven
sourceforge
程序員聯(lián)合開發(fā)網(wǎng)
最新隨筆
1.?此博客停止更新
2.?Adboe Reader提示中文字體有問題
3.?Python字符串換行處理
4.?如何轉(zhuǎn)換^M行末符號(hào)
5.?斯坦福大學(xué)開放課程--編程范式(四)
搜索
積分與排名
積分 - 903495
排名 - 15
最新隨筆
1.?此博客停止更新
2.?Adboe Reader提示中文字體有問題
3.?Python字符串換行處理
4.?如何轉(zhuǎn)換^M行末符號(hào)
5.?斯坦福大學(xué)開放課程--編程范式(四)
最新評(píng)論
1.?re: Git Stash用法[未登錄]
@陳梓瀚(vczh)
人稱輪帶逛!!!
--q
2.?re: Git Stash用法
@Loaden
這個(gè)B裝的好
--doubi
3.?re: Chrome神器Vimium快捷鍵學(xué)習(xí)記錄
哦啦啦啦啦
--阿里河
4.?re: Chrome神器Vimium快捷鍵學(xué)習(xí)記錄
希望能添加更新后的功能翻譯
--Vi.Ci
5.?re: Chrome神器Vimium快捷鍵學(xué)習(xí)記錄
@coolbit
謝謝,學(xué)會(huì)了
--xin
閱讀排行榜
1.?Git Stash用法(300676)
2.?Chrome神器Vimium快捷鍵學(xué)習(xí)記錄(67509)
3.?GitHub使用簡(jiǎn)介(35351)
4.?Ubuntu下硬盤的自動(dòng)掛載(23764)
5.?Ubuntu更新包管理器失敗:Requires installation of untrusted packages問題解決(18491)
評(píng)論排行榜
1.?【歡迎各位留言討論】C++中運(yùn)算符New的一個(gè)疑問【新的問題!】【各位繼續(xù)關(guān)注討論啊!】(23)
2.?Git Stash用法(21)
3.?Chrome神器Vimium快捷鍵學(xué)習(xí)記錄(19)
4.?C++友元的一個(gè)問題-----------由派生類訪問基類的私有成員(10)
5.?OpenCV學(xué)習(xí)筆記(一)(7)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 deercoder
蜜臀av性久久久久蜜臀aⅴ
|
色综合久久最新中文字幕
|
国产伊人久久
|
99久久免费只有精品国产
|
日韩人妻无码精品久久免费一
|
久久精品国产亚洲AV香蕉
|
久久夜色精品国产
|
欧洲性大片xxxxx久久久
|
久久久久亚洲?V成人无码
|
亚洲国产精品婷婷久久
|
91精品国产91久久
|
爱做久久久久久
|
久久久艹
|
久久AV高潮AV无码AV
|
久久久久久久波多野结衣高潮
|
亚洲午夜久久久
|
久久精品国产日本波多野结衣
|
亚洲香蕉网久久综合影视
|
精品无码久久久久国产动漫3d
|
99久久精品国产一区二区
|
久久亚洲日韩看片无码
|
久久综合亚洲鲁鲁五月天
|
国色天香久久久久久久小说
|
97精品依人久久久大香线蕉97
|
午夜天堂av天堂久久久
|
91精品国产色综合久久
|
青青草原综合久久大伊人精品
|
久久99精品久久久久久齐齐
|
四虎影视久久久免费
|
国产激情久久久久久熟女老人
|
AAA级久久久精品无码片
|
办公室久久精品
|
久久久久高潮综合影院
|
久久精品亚洲精品国产色婷
|
久久综合久久鬼色
|
国产精品成人久久久
|
av无码久久久久不卡免费网站
|
国产日韩欧美久久
|
久久天天躁狠狠躁夜夜躁2014
|
99国产欧美精品久久久蜜芽
|
久久国产V一级毛多内射
|