精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

史上最全 C/C++ 指針避坑指南:八年老鳥整理的 20 個致命錯誤

開發
指針就是個地址,搞清楚這個地址指向哪,什么時候有效,什么時候無效,基本就能避免大多數問題了。?

大家好,我是小康,一個在 C++ 的坑里摸爬滾打了 8 年的開發者。今天我要和大家聊聊那些讓每個程序員都頭疼的指針錯誤。

寫了這么久C++,指針還是經常讓你頭大?代碼莫名其妙崩潰,調試半天發現是指針出問題?面試官隨便問個指針問題就把你問懵了?

放心,不是你一個人!今天我們就用最通俗的語言,聊聊 C++ 指針那些"坑"。

記得我剛開始學習的時候,光是看到 int *p 這樣的代碼就覺得腦袋瓜子嗡嗡的。但是,指針這個東西吧,就像自行車,一旦掌握了要領,那騎起來就是享受!今天我就把這些年踩過的坑都給大家分享出來,保證說人話,不說教科書!

錯誤一:野指針-這是個沒拴繩的野狗啊!

int* p;  // 聲明一個指針,但沒有初始化
*p = 10; // 完蛋,這就是傳說中的野指針!

這就好比你養了條狗,但是沒給它栓繩子,它想跑哪跑哪,最后把鄰居家的花園給禍禍了...

正確做法是啥? 要么給它一個合法的地址,要么直接給 nullptr:

int* p = nullptr;  // 現代C++推薦用nullptr
// 或者
int x = 5;
int* p = &x;

錯誤二:忘記刪除堆內存 - 這是在浪費資源啊!

void leakMemory() {
    int* p = new int(42);
    // 函數結束了,但是忘記delete
}  // 內存泄漏!這塊內存永遠要不回來了

這就像你上廁所占了個坑,但是用完不沖水就走了,后面的人都沒法用了。正確的做法是:

void noLeak() {
    int* p = new int(42);
    // 用完了記得delete
    delete p;
    p = nullptr;  // 刪除后最好置空
}

更好的辦法是直接用智能指針,這就相當于給廁所裝了個自動沖水裝置:

#include <memory>
void modern() {
    auto p = std::make_unique<int>(42);
    // 函數結束會自動釋放內存,不用操心
}

錯誤三:解引用空指針 - 這不是自己給自己挖坑嗎?

int* p = nullptr;
*p = 100;  // 程序崩潰!這就像試圖往一個不存在的盒子里放東西

在使用指針之前,一定要檢查:

int* p = nullptr;
if (p != nullptr) {
    *p = 100;
} else {
    std::cout << "哎呀,指針是空的,可不能用!" << std::endl;
}

錯誤四:delete指針后繼續使用 - 這是在玩火啊!

int* p = new int(42);
delete p;  // 釋放內存
*p = 100;  // 災難!這塊內存已經不屬于你了

這就像你退了房租,但還硬要住在人家房子里,這不是找打嗎?

正確做法:

int* p = new int(42);
delete p;
p = nullptr;  // 刪除后立即置空
// 后面要用需要重新分配
p = new int(100);

錯誤五:數組使用單個delete刪除 - 這是在瞎搗亂啊!

int* arr = new int[10];
delete arr;    // 錯!這是在用單個delete刪除動態數組

數組要用delete[ ]:

int* arr = new int[10];
delete[] arr;  // 對!這才是刪除動態數組的正確姿勢
arr = nullptr;

錯誤六:指針運算越界 - 這是要翻車的節奏!

int arr[5] = {1, 2, 3, 4, 5};
int* p = arr;
for(int i = 0; i <= 5; i++) {  // 錯!數組只有5個元素
    cout << *p++ << endl;  // 最后一次訪問越界了
}

正確做法:

int arr[5] = {1, 2, 3, 4, 5};
int* p = arr;
for(int i = 0; i < 5; i++) {  // 對!只訪問有效范圍
    cout << *p++ << endl;
}

錯誤七:返回局部變量的指針 - 這是在玩火!

int* getLocalPtr() {
    int x = 42;
    return &x;  // 危險!x是局部變量,函數結束就沒了
}

這就像你要借別人的東西,但是人家已經搬家了,你上哪借去?

正確做法:

int* getSafePtr() {
    int* p = new int(42);
    return p;  // 返回堆內存的指針
}
// 或者更好的做法
std::unique_ptr<int> getSaferPtr() {
    return std::make_unique<int>(42);
}

錯誤八:指針類型不匹配 - 強扭的瓜不甜啊!

double d = 3.14;
int* p = &d;  // 錯!類型不匹配

正確做法:

double d = 3.14;
double* p = &d;  // 對!類型要匹配

錯誤九:多重指針不打基礎 - 這是在疊積木不打底!

int** pp;  // 指向指針的指針
*pp = new int(42);  // 危險!底下一塊積木都沒放就想往上疊

正確的搭法:

// 一層一層來,穩穩當當
int* p = new int(42);     // 先放好底層積木
int** pp = &p;            // 再往上疊一塊
cout << **pp << endl;     // 現在這積木穩當,可以安全使用了

記住:多重指針就像搭積木,得從底層開始,一層一層穩妥地往上搭,跳著搭就容易倒塌!

錯誤十:const 和指針的位置擺錯 - 這是在挖坑自己跳啊!

最常見的三種指針和const組合:

int value = 10, other = 20;

// 三種基本組合
const int* p1 = &value;      // ? *p1 = 100;    ? p1 = &other;
int* const p2 = &value;      // ? *p2 = 100;    ? p2 = &other;
const int* const p3 = &value;// ? *p3 = 100;    ? p3 = &other;

常見錯誤:

void onlyRead(int* const data) {   // 錯誤用法!
    *data = 100;   // 竟然能改值!
    data = &other; // 這個才報錯
}

void onlyRead(const int* data) {   // 正確用法!
    *data = 100;   // 編譯報錯,保護數據不被修改
    data = &other; // 允許改變指向
}

記憶技巧:

  • const int* : const 在 * 左邊,鎖住值
  • int* const : const 在 * 右邊,鎖住指向
  • 要保護數據不被改,就用 const int*

錯誤十一:構造函數漏初始化指針 - 這是在埋定時炸彈啊

class MyClass {
    int* ptr;
public:
    MyClass() {
        // 完蛋,忘記初始化ptr了
    }
};  // 使用ptr時可能崩潰

正確做法:

class MyClass {
    int* ptr;
public:
    MyClass() : ptr(nullptr) {  // 構造時就初始化
        // 或者分配內存
        ptr = new int(42);
    }
};

錯誤十二:函數參數傳遞指針沒聲明const - 這是在裸奔啊!

// 下面這種寫法,數據像裸奔一樣毫無保護
void printData(int* data) {  
    cout << *data << endl;  // 雖然只是讀數據,但是沒人知道啊!
}

正確做法:

// 加個const,數據就穿上了防護服
void printData(const int* data) {  
    cout << *data << endl;
}

記住:只是讀數據不修改時,一定要加const!不加const就像把數據扔在大馬路上,誰都能改。

錯誤十三:指針移動導致內存釋放失敗 - 這是在玩火!

int* p = new int[5];
for(int i = 0; i < 5; i++) {
    cout<<*p<<endl;
    p++;  // 完蛋,循環結束后p已經不指向數組起始位置了
}
delete[] p;  // 錯誤!p已經移動了

正確做法:

int* p = new int[5];
int* temp = p;  // 用臨時指針做移動
for(int i = 0; i < 5; i++) {
    cout<<*temp<<endl;
    temp++;
}
delete[] p;  // 正確!p還在起始位置

錯誤十四:指針和引用混用 - 這是在給自己找麻煩!

void func(int*& ptr) {  // 指針的引用,看著就頭大
    ptr = new int(42);
}

更清晰的做法:

std::unique_ptr<int>& func() {  // 返回智能指針的引用
    static auto ptr = std::make_unique<int>(42); // 返回 static 對象
    return ptr;
}

錯誤十五:不安全的指針向下轉換 - 這是在蠻干啊!

class Base {};
class Derived : public Base {};

Derived* d = new Derived();
Base* b = d;        // 向上轉換,安全
Derived* d2 = b;    // 錯誤!向下轉換需要 dynamic_cast

正確做法:

Derived* d2 = dynamic_cast<Derived*>(b);  // 安全的向下轉換
if( d2 != nullptr ) {  // 檢查轉換是否成功
    // 使用d2
}

錯誤十六:函數指針調用前未檢查 - 這是在冒險啊!

// 錯誤示例
void (*fp)(int) = nullptr;
fp(42);  // 災難!沒檢查就直接調用

// 或者更糟的情況
void (*fp)(int);  // 未初始化就使用
fp(42);  // 更大的災難!

正確做法:

void (*fp)(int) = nullptr;  // 明確初始化為nullptr
// 或者賦值一個具體函數
void foo(int x) { cout << x << endl; }
fp = foo;

// 使用前檢查
if(fp!=nullptr) {
    fp(42);  // 安全!
} else {
    cout << "函數指針無效" << endl;
}

錯誤十七:在類里 delete this 指針 - 簡直是自殺!

// 錯誤示例
class Player {
public:
    int score;
public:    
    void killSelf() {
        delete this;       // 自己把自己刪了
    }
};

Player* player = new Player();
player->killSelf();      // 這下好了,后面的代碼都懸了
resetGame();      // 慘!死人也想重開一局

正確的做法:

class Player {
    // 方法1:讓外面的代碼來管理生命周期
    void cleanup() {
        score = 0;
        // 只做清理工作,不要自己刪自己
    }
};

// 外部代碼負責刪除
Player* player = new Player();
player->cleanup();  // 先清理
delete player;      // 再刪除
player = nullptr;   // 最后置空

// 方法2:更現代的方式 - 使用智能指針
class Player {
    // 類里面該做啥做啥,不用操心刪除的事
};

// 讓智能指針來管理生命周期
auto player = make_shared<Player>();
// 不用管刪除,超出作用域自動清理

記住:

  • 在類的方法里刪除 this指針就像自殺,死了還想干活那肯定不行
  • 對象的生命周期最好交給外部代碼或智能指針管理
  • 如果非要在類里面刪除自己,那刪完就立即返回,別做其他操作

錯誤十八:智能指針互相引用 - 這是在手拉手繞圈圈!

循環引用示例:

// 錯誤示例:兩個朋友互相拉手不放
class Student {
    shared_ptr<Student> bestFriend;  // 我有個好朋友
public:
    void makeFriend(shared_ptr<Student> other) {
        bestFriend = other;  // 我拉著我朋友
    }
};

// 兩個學生互相成為好朋友
auto tom = make_shared<Student>();
auto jerry = make_shared<Student>();
tom->makeFriend(jerry);    // tom拉住jerry
jerry->makeFriend(tom);    // jerry也拉住tom
// 完蛋!他們互相拉著對方不放手,
// 即使放學了也走不了(內存不能釋放)

正確的做法:

// 正確示例:一個人拉手,一個人輕拉
class Student {
    weak_ptr<Student> bestFriend;  // 用weak_ptr,不牢牢抓住對方
public:
    void makeFriend(shared_ptr<Student> other) {
        bestFriend = other;  // 輕輕拉住朋友就好
    }
};

auto tom = make_shared<Student>();
auto jerry = make_shared<Student>();
tom->makeFriend(jerry);    
jerry->makeFriend(tom);    
// 現在好了,放學后可以松手回家了(正常釋放內存)

記住:

  • 兩個對象用shared_ptr互相引用,就像兩個人死死拉住對方的手不放,誰都走不了
  • 要解決這個問題,讓一方改用weak_ptr,就像輕輕牽手就好,需要的時候隨時可以松開
  • 智能指針循環引用會導致內存泄漏,就像兩個人一直拉著手,永遠不能回家

注意:智能指針的循環引用很容易把人繞暈,我用兩張手繪小圖,帶大家一步步理解這個過程:

循環引用圖解:

說明:智能指針對象 tom 和 jerry 的引用計數值 count 都變成 2,導致在 main 程序退出時,各自的 count 都無法減為 0 ,從而造成內存泄漏。

使用 weak_ptr 避免循環引用:

說明:tom 和 jerry 的引用計數值 count 始終都是 1,main 程序退出時,各自的 count 都減到 0 ,內存正常釋放。

錯誤十九:指針成員的深淺拷貝 - 很容易翻車!

class Resource {
    int* data;
public:
    Resource() { data = newint(42); }
    ~Resource() { delete data; }
    
    // 默認拷貝構造函數和賦值運算符會導致災難
    // Resource(const Resource& other) = default;  // 淺拷貝!
    // Resource& operator=(const Resource& other) = default;  // 淺拷貝!
};

void disasterExample() {
    Resource r1;
    Resource r2 = r1;    // 淺拷貝:r1和r2的data指向同一內存
    // 函數結束時,r1和r2都會delete同一個data!程序崩潰
}

正確做法:

class Resource {
    int* data;
public:
    Resource() { data = newint(42); }
    ~Resource() { delete data; }
    
    // 實現深拷貝
    Resource(const Resource& other) {
        data = newint(*other.data);  // 復制數據本身
    }
    Resource& operator=(const Resource& other) {
        if (this != &other) {
            delete data;
            data = newint(*other.data);
        }
        return *this;
    }
    
    // 或者更好的方案:使用智能指針
    // unique_ptr<int> data;  // 禁止拷貝
    // shared_ptr<int> data;  // 共享所有權
};

人人都知道要深拷貝,但實際寫代碼時很容易忽略,尤其是在類有多個指針成員時。現代 C++ 建議優先使用智能指針來避免這類問題。

錯誤二十:函數內修改指針實參 - 這是在玩障眼法!

// 錯誤示例
void resetPointer(int* ptr) {
    ptr = nullptr;  // 以為這樣就能把外面的指針置空
}

int* p = new int(42);
resetPointer(p);    // 調用函數
cout << *p;         // 糟糕!p根本沒變成nullptr,還在指向原來的地方

正確做法:

// 方法1:使用指針的指針
void resetPointer(int** ptr) {  // 傳入指針的地址
    *ptr = nullptr;  // 現在可以修改原始指針了
}

int* p = newint(42);
resetPointer(&p);   // 傳入p的地址
// 現在p確實被置空了

// 方法2:使用引用
void resetPointer(int*& ptr) {  // 使用指針的引用
    ptr = nullptr;
}

int* p = newint(42);
resetPointer(p);    // p會被置空

記住:

  • 函數參數是傳值的,修改指針形參不會影響外面的指針
  • 要修改外部指針,必須傳入指針的指針
  • 這個問題在做指針操作時特別常見,很多人都會犯這個錯

實戰小貼士

(1) 優先使用智能指針

// 不推薦
MyClass* ptr = new MyClass();
// 推薦
unique_ptr<MyClass> ptr = make_unique<MyClass>();

(2) 指針安全法則

  • 用完指針及時置空 nullptr
  • 分配內存后立即考慮釋放的時機和方式
  • 涉及指針的函數,第一步就是檢查指針是否為 nullptr
  • 使用智能指針時,要注意循環引用

(3) 關于指針和引用的選擇:

// 需要修改指針指向時,必須傳遞指針
void updatePtr(int*& ptr); // 通過引用修改指針 - 這種情況很少見
void updatePtr(int** ptr); // 通過指針修改指針 - 更常見的做法

// 只需要訪問或修改指針指向的數據時
void process(const int* ptr);  // 不修改數據時用const
void modify(int* ptr);

(4) 代碼規范建議

// 指針聲明時緊跟類型
int* ptr;  // 推薦
int *ptr;  // 不推薦

// 多重指針超過兩層就要考慮重構
int*** ptr;  // 需要重新設計

// const的一致性
void process(const std::string* data);  // 參數不修改就用const

總結

看完這些指針的坑,是不是覺得其實也沒那么可怕?記住一點:指針就是個地址,搞清楚這個地址指向哪,什么時候有效,什么時候無效,基本就能避免大多數問題了。

責任編輯:趙寧寧 來源: 跟著小康學編程
相關推薦

2024-04-03 12:30:00

C++開發

2018-01-20 20:46:33

2025-04-27 00:04:00

C#異步編程

2025-03-20 12:00:00

C++this指針匯編

2023-11-22 13:22:51

C++函數

2024-08-26 08:29:55

2022-03-04 18:11:16

信服云

2011-04-11 11:09:50

this指針

2023-11-01 15:32:58

2021-12-21 15:31:10

C++語言指針

2021-06-18 12:30:36

C++函數指針編程語言

2024-05-15 16:01:04

C++編程開發

2022-01-23 14:29:25

C語言編程語言

2024-07-03 12:04:42

C++this?

2010-02-02 15:01:59

C++成員函數指針

2014-01-24 09:49:01

C++指針

2020-06-12 11:03:22

Python開發工具

2010-01-26 13:42:28

C++指針

2016-01-28 14:41:06

CC++編碼

2024-04-24 13:45:00

點贊
收藏

51CTO技術棧公眾號

99精品热6080yy久久| 综合久久成人| 亚洲天堂福利av| 亚洲xxxxx电影| 日本天堂网在线观看| 中文字幕一区二区三区四区五区| 91成年人网站| 色综合一区二区日本韩国亚洲| 亚洲婷婷综合色高清在线| 91麻豆蜜桃| 国产欧美日韩另类| 欧美自拍偷拍| 日韩欧美视频一区| 亚洲精品乱码久久久久久自慰| 97超碰人人在线| 国产传媒久久文化传媒| 欧美中文字幕在线播放| 亚洲国产精品一区二区久久hs| 91成人短视频| 在线观看亚洲精品视频| wwwjizzjizzcom| 九色在线视频蝌蚪| 国产成人精品免费在线| 日韩av片电影专区| 毛片a片免费观看| 国产精品美女久久久久久不卡| 91精品国产丝袜白色高跟鞋| 欧美a在线视频| a视频在线观看免费| 久久久久88色偷偷免费| 亚洲综合在线小说| 欧美日韩a v| 99在线热播精品免费99热| 日韩视频永久免费观看| 熟女人妻在线视频| 亚洲电影一区| 欧美日韩精品系列| 99热成人精品热久久66| 91九色国产在线播放| 日韩一区在线播放| 亚洲7777| 欧美日韩视频精品二区| www.亚洲在线| 1卡2卡3卡精品视频| 午夜精品免费观看| 国产欧美91| 久久久噜噜噜久久久| 久久成人小视频| 久久国产中文字幕| 亚洲人成欧美中文字幕| 国产亚洲色婷婷久久99精品91| 久久69av| 欧美一区二区视频观看视频 | 欧美久久精品一级c片| 亚洲国产精品嫩草影院久久| 欧美一级片在线免费观看| 国产精品777777在线播放| 欧美唯美清纯偷拍| 日本熟妇人妻中出| 成人免费短视频| 欧美性猛交xxxx富婆弯腰| 国产二区视频在线| av中文字幕在线看| 午夜精品福利一区二区三区蜜桃| 毛片av在线播放| 国模私拍视频在线播放| 一区二区三区精密机械公司| 成年丰满熟妇午夜免费视频| 日本高清在线观看视频| 亚洲午夜激情网页| www.好吊操| 成入视频在线观看| 欧美日韩国产一区中文午夜| 久久久久久久久久久视频| 欧美激情网站| 91久久国产最好的精华液| 成年人免费大片| 精品美女一区| 欧美一级日韩免费不卡| youjizz.com日本| 麻豆精品av| 亚洲人成网站免费播放| 免费看91的网站| 婷婷综合激情| 欧美精品久久一区二区| 国产成人免费看| 久久精品卡一| 国产中文字幕日韩| 国产黄频在线观看| 91日韩一区二区三区| 欧美一区二区综合| 麻豆网站在线免费观看| 亚洲一二三区不卡| 任你操这里只有精品| 成人亚洲网站| 精品免费一区二区三区| 波多野结衣一本| 日韩精品中文字幕第1页| 国产精品一卡| 久久精品一区中文字幕| 久久久美女视频| 久久精品亚洲一区二区| 亚洲在线视频观看| 亚洲色图欧美视频| 中文字幕制服丝袜成人av | 欧美美女搞黄| 综合中文字幕亚洲| 国产精品50p| 欧美大片网站| 亚洲国产天堂网精品网站| 欧美老熟妇乱大交xxxxx| 国产精品成人av| 97人人模人人爽人人喊中文字| 337p粉嫩色噜噜噜大肥臀| 国产一区二区美女| 日韩欧美精品一区二区| 丁香花在线电影| 欧美日韩国产精选| 日本japanese极品少妇| 亚洲精品97| 国产99久久精品一区二区 夜夜躁日日躁| 91片黄在线观看喷潮| 91看片淫黄大片一级在线观看| 日本黄色a视频| 欧美黑人巨大xxxxx| 欧美电视剧在线看免费| 成人性生交大片免费看无遮挡aⅴ| 亚洲午夜视频| 国产日韩欧美中文在线播放| 毛片在线播放网址| 亚洲福利一区二区| 成人亚洲免费视频| 深爱激情综合| 91av中文字幕| 午夜免费福利视频| 《视频一区视频二区| 99福利在线观看| 老司机成人在线| 欧美日韩第一页| av无码精品一区二区三区宅噜噜| 国产亚洲精品aa| 日本免费一级视频| 美女av一区| 欧美激情18p| 国产视频一二三四区| 中文av一区| 一区二区三区.www| 成年人视频在线免费| 精品在线网站观看| 久久久久久免费精品| 精品国产18久久久久久| 亚洲婷婷在线视频| 欧美视频国产视频| 午夜欧美在线| 国产日韩在线精品av| 在线免费看黄网站| 欧美探花视频资源| 成年人看的免费视频| 美女黄色成人网| 欧美一区观看| 成人黄色在线| 日韩小视频网址| 国产区精品在线| 亚洲欧洲综合另类| 中文字幕1区2区| 欧美久久一级| 国产精品乱码视频| 不卡av播放| 综合国产在线观看| 国产精品无码免费播放| 亚洲人成网站精品片在线观看 | 国产福利一区二区| 日韩欧美猛交xxxxx无码| 亚洲精品一二三**| 午夜精品久久17c| 日本在线视频1区| 欧美亚一区二区| 国产在线观看免费视频软件| 国产自产视频一区二区三区| 成人午夜免费剧场| 嫩草国产精品入口| 国产成人精品一区二区三区| 97人人在线| 欧美mv和日韩mv的网站| 日韩免费视频一区二区视频在线观看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 天天干天天玩天天操| 综合天堂av久久久久久久| 国产91亚洲精品一区二区三区| 九色porny自拍视频在线播放 | 成人18视频| 正在播放日韩精品| 在线观看免费高清视频97| 路边理发店露脸熟妇泻火| 日本v片在线免费观看| 在线精品视频一区二区三四| 精品国产视频一区二区三区 | 菠萝菠萝蜜网站| 蜜乳av一区二区| 老司机激情视频| 激情婷婷综合| 91久久国产自产拍夜夜嗨| 桃色一区二区| 久久久久免费精品国产| 第一页在线观看| 精品国产成人在线影院| 亚洲视屏在线观看| 亚洲午夜久久久久久久久电影院 | 欧美视频一二区| 欧美午夜精品久久久| 青娱乐国产在线视频| 久久精品人人做人人爽人人| 亚洲少妇中文字幕| 理论片日本一区| 黄色片一级视频| 在线电影一区| 成人性做爰片免费视频| 国产一区二区三区四区大秀| 国产乱码一区| 日本一区二区三区电影免费观看| 国产高清在线不卡| av在线最新| 九色成人免费视频| 日本中文字幕在线视频| 亚洲毛片在线免费观看| 丰满熟妇乱又伦| 91精品国产综合久久精品麻豆| 黄色片视频免费| 精品动漫一区二区三区| 欧美一区二区三区爽爽爽| 亚洲国产高清aⅴ视频| a级在线观看视频| 粉嫩久久99精品久久久久久夜| 手机版av在线| 日韩在线一区二区三区| 欧美高清中文字幕| 亚洲天天综合| 亚洲春色在线视频| 日韩国产一二三区| 国产精品美女久久久久av超清| 678在线观看视频| 日韩视频免费在线| 国产美女在线观看| 中文字幕av一区二区| 日韩电影免费| 日韩h在线观看| 欧美一级性视频| 日韩一卡二卡三卡国产欧美| 亚洲一区 中文字幕| 欧美日韩一本到| 黄色一区二区视频| 亚洲欧美日韩国产一区| 不卡av在线网站| 精品美女视频在线观看免费软件| 精品日韩一区二区三区| 99久久久国产精品无码免费| 91精品国产色综合久久ai换脸| 中日韩在线观看视频| 色综合色综合色综合色综合色综合 | 一二三四中文字幕| 日本女优一区| 亚洲春色在线视频| 人人狠狠综合久久亚洲婷| 日韩电影免费观看高清完整| 精品国产乱码久久久久久果冻传媒| 久久狠狠久久综合桃花| 精品中文字幕一区二区三区| 国产精品久久久久久久7电影| 欧洲av一区二区| 国产精品久久久久av免费| 一区二区电影免费观看| 国产精品久久久久9999| 成人四虎影院| 成人h视频在线观看播放| 日韩欧美中文字幕一区二区三区| 成人写真福利网| 亚洲免费看片| 国产精品久久久久av福利动漫| 中文字幕视频精品一区二区三区| 91在线在线观看| 婷婷久久免费视频| 成人看片视频| 欧美一区二区三区久久| 国产精品午夜av在线| 国产在线观看91一区二区三区| 日韩精品国内| 91亚洲人成网污www| 草b视频在线观看| 欧美亚洲三区| 少妇黄色一级片| 成人免费高清在线| 免费看黄色aaaaaa 片| 久久精品欧美一区二区三区麻豆| 午夜国产福利一区二区| 亚洲成av人综合在线观看| 西西44rtwww国产精品| 911精品国产一区二区在线| av网站在线免费看| 国产视频在线一区二区| 国产综合在线观看| 久久精品国产精品亚洲| 韩国日本一区| 成人黄色网免费| 国产日韩三级| 日韩精品一区二区三区外面| 国产国产精品| 久久久久免费看黄a片app| 首页综合国产亚洲丝袜| 欧美日韩一区二区区别是什么| 97久久精品人人做人人爽50路 | 天天久久综合网| 国产美女精品一区二区三区| 中文字幕5566| 亚洲另类中文字| 国产剧情在线视频| 欧美一级理论片| 国产在线一二三| 久久99亚洲精品| 免费成人高清在线视频| 国产精品一区而去| 日韩片欧美片| 亚洲一区二区蜜桃| 国产精品123| 男女做爰猛烈刺激| 天天色天天操综合| 97国产成人无码精品久久久| 精品久久久久久久久久久久久久久久久 | 青青国产91久久久久久| 久久久久99人妻一区二区三区| 国产欧美精品一区| 国产精品久久久久久久久久久久久久久久久 | 久久精品女人| 国产麻豆剧传媒精品国产av| 国产精品久久久久桃色tv| 欧美一二三区视频| 亚洲精品一区二区三区香蕉| 日本最黄一级片免费在线| 欧美专区在线观看| 日韩大片在线免费观看| www.国产二区| 国内精品不卡在线| 国产在线免费看| 欧美日韩一区二区三区在线看| 色视频免费在线观看| 欧美一区亚洲一区| 国产成人一二片| 视色,视色影院,视色影库,视色网| 极品少妇xxxx精品少妇偷拍| jizz中文字幕| 欧美性猛xxx| 成人一区二区不卡免费| 奇米成人av国产一区二区三区| 国产精久久一区二区| 玖玖精品在线视频| 激情成人综合网| 日本一区二区视频在线播放| 色婷婷综合激情| 青青草视频在线观看| 日韩av手机在线看| 久久97视频| 久久9精品区-无套内射无码| 久久精品一区四区| 中文字幕精品无码一区二区| 精品国产成人系列| www.51av欧美视频| 国产精品乱码一区二区三区| 日韩精品永久网址| 6080国产精品| 亚洲人成小说网站色在线 | 先锋影音亚洲资源| 日本视频在线一区| 91l九色lporny| 欧美一区二区三区电影| a视频在线播放| 操人视频欧美| 91成人在线精品视频| 中文字幕欧美日韩在线| 国产三线在线| 久久精品午夜一区二区福利| 香蕉久久a毛片| 成人信息集中地| 日韩视频免费观看高清完整版在线观看 | huan性巨大欧美| 91手机在线视频| 伊人成年综合电影网| 一区二区三区久久久久| 精品视频999| 成人在线观看黄色| 成人av资源| 另类图片国产| 午夜国产福利一区二区| 精品国产乱码久久| 成人私拍视频| 久久香蕉视频网站| 99国产欧美另类久久久精品| 91亚洲视频在线观看| 欧美激情18p| 欧洲grand老妇人| 91porn在线| 色婷婷av久久久久久久|