99爱在线视频这里只有精品_窝窝午夜看片成人精品_日韩精品久久久毛片一区二区_亚洲一区二区久久

合肥生活安徽新聞合肥交通合肥房產(chǎn)生活服務(wù)合肥教育合肥招聘合肥旅游文化藝術(shù)合肥美食合肥地圖合肥社保合肥醫(yī)院企業(yè)服務(wù)合肥法律

代做CS2850、代寫 c/c++語言編程

時(shí)間:2023-12-31  來源:合肥網(wǎng)hfw.cc  作者:hfw.cc 我要糾錯(cuò)



CS2850 Assessed Coursework 2
This assignment must be submitted by Friday, 5 January 2023, at 10 am. Feedback will be provided on the date provided in the coursework grid.
Learning outcomes assessed
In this assignment, you will implement a toy model of a dynamic memory allocator. To complete all the tasks you need to
• declare, define, and update variables and functions in C,
• use pointer arithmetic,
• know how a memory allocator works,
• read from stdin and write to stdout using getchar and printf, and • allocate and free memory using malloc.
Instructions
Submit this assignment using the Moodle submission link 202**4 CS2850 CW2: C mini-project by Fri- day, 5 January 2023, at 10 am. The submission system allows you to submit a single archive file, which should contain all your programs. Create a compressed directory, e.g. 202**4cs2850.zip, containing the four C files described in the following sections , step1.c, step2.c, step3.c, and step4.c. We suggest you write a separate file, functions.c, with all auxiliary functions. To include it in a task-specific program, e.g. step1.c, by write
#include "functions.c" 1
on top of the file. Your files will be recompiled and run in the submission directory with the compiler available on the teaching server. Be sure your name or ID does not appear anywhere in your submission.
Academic misconduct
Coursework submissions are routinely checked for academic misconduct (working together, copying from sources, etc.). Penalties can range from a 10% deduction of the assignment mark, zero for the assignment or the case being referred to a Senior Vice-Principal to make a decision (for repeat offences). Further details can be found here.
Introduction
In this assignment, you write a program that simulates a dynamic memory allocator. The process address space is represented by an array of characters, memory. Given a size in bytes, len, the allocator scans the array to find a free memory block of size len and returns the index of the start of the block. For simplicity, the program maintains an integer array of the same size as memory to store the sizes of the allocated blocks. The address space is represented by
 1

 struct space {
 };
char *memory; int *sizes; int len;
where memory and sizes are pointers to the first entry of the character and integer arrays and len is their length. In the dynamic version of the program, the program stores an arbitrary number of arbitrary sentences entered by a user on standard input. The size of the memory space grows when needed. At the beginning, the allocator stores all blocks one after the other. When some blocks are freed, allocating new blocks at the end becomes inefficient. The allocator should search the space for the first block compatible with the required size. Your implementation should follow the steps described in the next sections. Save a new C file, step#.c, for each section. Each program should compile without errors and produce the expected output. After completing a section, test your implementation with Valgrind. Even if there are no memory leaks, Valgrind may outline hidden execution errors. Try to understand and fix all of them.
Example. If the initial size of the memory array is 10 and you use an input file, input.txt, containing the following lines
a run of the final program should print
0000000000 1 2 0000000000000000000000000000000000000000000000 3 Brian Kernighan++ 4 17///////////////00000000000000000000000000000 5 Brian Kernighan++CS2850++ 6 17///////////////8///////000000000000000000000 7 Brian Kernighan++ D e n n i s Ritchie++ 8 17///////////////0000000016//////////////00000 9
Brian Kernighan++and++ D e n n i s Ritchie++ 10 17///////////////5////00016//////////////00000 11 12 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 13 Brian Kernighan++and++ Dennis Ritchie++The C Programming Language++ 14 17///////////////5////00016//////////////28//////////////////////////0000000000000000000000000 15 16 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 17
on standard output. Note that the program automatically frees the sentence CS2500. The memory grows when the user enters the sentences Brian Kerninghan and C Programming Language. The allocator saves the sentence and in the first suitable available space. To print memory and sizes, you can use printMemory and printSizes provided in the Appendix of this document or in Supporting code for 202**4 CS2850 CW2.
Step 1: Initialization (25 marks)
Create a file with all auxiliary functions called functions.c. On top of it, write the statements for including unistd.h and stdlib.h. Below those, define the following macros,
1 2 3 4
1 2 3 4 5
 Brian Kernighan
 CS2850
Dennis Ritchie
and
The C Programming Language
1 2 3 4 5
                  #define BUSY ’+’ #define FREE ’ ’ #define BUSYSIZE --1
 #define FREESIZE 0
2

and the structure defined above. You will use BUSY and FREE to mark the allocated and free entries of memory and BUSYSIZE and FREESIZE to mark the allocated (non-starting) and free entries of sizes. The first entry of an allocated block block is marked with the length of the block in sizes. To complete this section’s task you need to implement 2 functions,
1. initializeMemory, which accepts an integer memSize and a pointer to the memory struct, mem,asinputs,allocatestwoblocksofsizememSize * sizeof(char)andmemSize * sizeof(char) using malloc, makes memory and sizes point to these blocks, sets len to memSize, initializes
the arrays by marking all entries with FREE and FREESIZE, and print memory and sizes by calling printMemory and printSizes.
2. cleanMemory, which accepts a pointer to the memory struct, mem, as an input, replace all entries of memory and sizes with FREE and FREESIZE, print memory and sizes by calling printMemory and printSizes, and free the allocated memory by calling free.
Test your implementation by compiling and running q1.c in Supporting code for 202**4 CS2850 CW2. The output should be
 00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
 00000000000000000000000000000000000000000000000000
Before proceeding, make sure Valgrind does not detect execution errors or memory leaks.
Step 2: Stack Allocator (25 marks)
In this section, the task is to implement a stack-like allocator and de-allocator. This is different from the heap-like allocator you will implement in the next section because a new memory block is always allocated at the end of the previous one. The de-allocator takes the index of the first entry of the block to be deallocated and removes its content by setting the block entries back to FREE (in memory) and FREE (in FREESIZE). To complete this section’s task, you need to implement two functions,
1. int stackAllocator, which accepts an integer nbytes and a pointer to the memory struct, mem, as inputs, searches for the first entry of sizes marked with FREESIZE, check whether there are nbytes available entries after it, writes nbytes on that entry of sizes, writes BUSYSIZE on the nbytes − 1 following entries of sizes, finds the corresponding nbytes entries in memory and mark them with BUSY, and returns the index of the first entry of the newly allocated block, and
2. void deallocator, which accepts an integers, p, and a pointer to the memory struct, mem, as inputs, find the location corresponding to p in sizes, read the block length, nbytes, from that entry, and sets the nbytes entries of memory starting at p to FREE and the corresponding nbytes entries of sizes to FREESIZE.
If the first entry marked with FREESIZE in sizes is too close to the end of the array, i.e. if there are not nbytes entries of sizes marked with FREESIZE after it, stackAllocator should return mem->len. This allows you to check from the program if the memory has been successfully allocated before writing on it. The deallocator should not return anything. Test your implementation by
3
1 2 3 4 5 6

compiling and running q2.c in Supporting code for 202**4 CS2850 CW2. All string facilities are given in the appendix or in Supporting code for 202**4 CS2850 CW2. The output of the program should be
1 2 3 4 5 6 7 8 9 10
 00000000000000000000000000000000000000000000000000
Brian Kernighan+++++
 20//////////////////000000000000000000000000000000 Brian Kernighan+++++CS2850+++++ 20//////////////////11/////////0000000000000000000 Brian Kernighan+++++ 20//////////////////000000000000000000000000000000
 00000000000000000000000000000000000000000000000000
The third sentence, Dennis Ritchie, is not allocated because there is not enough available space. Check that the program behaves correctly even in such situations by running the binary with Valgrind.
Step 3: Heap Allocator (25 marks)
In this section, you rewrite the allocator to make it a heap-like allocator, i.e. to let the program allocate memory in the free space left by previous frees. To complete this section’s task, you need to implement two functions,
1. int spaceScanner, which takes an integer, nbytes, and a pointer to the memory structure, mem, as inputs, finds the first entry of sizes that is marked with FREESIZE and has nbytes entries also marked with FREESIZE after it, and returns the index of the corresponding entry of memory if the search is successful and mem->len otherwise, and
2. int heapAllocatorQ3, which has the same inputs as stackAllocation, calls spaceScanner to obtain the start index, p, of a suitable block, sets the nbytes entries of memory after p to FREE and the corresponding nbytes entries of sizes to FREESIZE, and returns p.
Test your implementation by compiling and running q3.c in Supporting code for 202**4 CS2850 CW2with memSize set to 50. The output should be
 00000000000000000000000000000000000000000000000000 Brian Kernighan++ 17///////////////000000000000000000000000000000000 Brian Kernighan++CS2850++
 17///////////////8///////0000000000000000000000000 Brian Kernighan++ D e n n i s Ritchie++ 17///////////////0000000016//////////////000000000 Brian Kernighan++ D e n n i s Ritchie++ 17///////////////0000000016//////////////000000000 Brian Kernighan++and++ D e n n i s Ritchie++
 17///////////////5////00016//////////////000000000 00000000000000000000000000000000000000000000000000
The sentence and is now allocated in the free space once occupied by the sentence CS2850. The sentence The C Programming Language is not allocated because the memory is not big enough. You will fix this problem in the next section.
4
1 2 3 4 5 6 7 8 9 10 11 12 13

Step 4: User interactions (25 marks)
Before making the program interactive, you need a function that increases the size of the memory if needed. In a real process, this means requiring the intervention of the Operating System (OS) through a system call. In this toy model, you use mallloc to simulate the OS intervention by reallocating memory and size. You also have to parse the input sentences and save them into strings. As you do not want to restrict the length of a user sentence, you need to buffer it into a dynamically allocated string that grows as new characters arrive. To complete this section’s task, you need two implement two functions
1. void increaseMemory which takes an integer, nbytes, and a pointer to the memory struc- ture, mem, as inputs, computes the length of the new memory, newLen, using
1 2 3
 int newLen = mem-->len;
while (newLen -- mem-->len < nbytes)
        newLen = 2 * (newLen + 1);
saves the content of memory, sizes, and len into three temporary variables, allocates a new memory space by calling initializeMemory(newLen, mem), copies the content of the temporary variable into the newly initialized memory, and free the old memory using free, and
2. int readString, which takes a pointer to a string, i.e. a pointer to a pointer to a character, s, as an input, calls malloc(1) to allocate a starting string, stores it in *s, gets characters from the terminal by calling getchar until you reach a new line character or EOF, reallocates the string to accommodate each new character through
 len++;
 *s = malloc(len + 1); char *temp = *s; copyString(temp, s, len); free(temp);
where len is the length of the string before attaching the new character, stores the new character in the len-th entry of *s, null terminates the final string, and returns 1 if the last character is a new line character and 0 if the last character is EOF.
To copy the temporary integer array into the newly allocated size array, sizes, write a function, copyArray(int *old, int *new, int len), by adapting copyString given in the appendix. You also need to modify heapAllocatorQ3. Instead of returning mem->len if spaceScanner does not find a suitable free block, the function should call increaseMemory until such a block becomes available. For example, you can replace the early-return statement of the old implementation with
1 2 3 4 5
 int t0;
while ((t0 = spaceScanner(nbytes, mem))== mem-->len) increaseMemory(nbytes, mem
);
Test your implementation by running the following program. Test your implementation by com- piling and running q4.c in Supporting code for 202**4 CS2850 CW2. The deallocator removes the second sentence of each group of three sentences after the user enters the third one. A sample output of this program is given in the section called Introduction.
Marking criteria
5
1 2

Full marks will be awarded for correct answers to the above questions. Submissions are assessed on functionality and coding style. Try to write readable, well-formatted and well-commented code. More importantly, all your programs must be compiled using gcc -Wall -Werror -Wpedantic and run without errors on linux.cim.rhul.ac.uk. To spot possible execution issues, run the programs with Valgrind and check that the end of the output is
... == ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 1
Before submitting, test your code with the assignment Moodle Code Checker. Passing all tests, however, will not guarantee you get full marks. Please use the CS2850 Piazza Forum to post any specific questions.
Extensions
This assignment is subject to College policy on extensions. If you believe you require an extension please read the documentation carefully and guidelines here
Extenuating circumstances
If you submit an assessment and believe that the standard of your work was substantially affected by your current circumstance then you can apply for Extenuating Circumstances. Details on how to apply for this can be found here. Read the accompanying documentation on the above link carefully. Please note decisions on Extenuating Circumstances are made at the end of the academic year.
Late Submission
In the absence of acceptable extenuating cause, late submission of work will be penalised as follows: 1. for work submitted up to 24 hours late, the mark will be reduced by ten percentage marks; 2. for work submitted more than 24 hours late, the maximum mark will be zero.
A Auxiliary functions
Here you can find a possible implementation of the string-handling and printing facilities you need for this assignment. The code is also available in Supporting code for 202**4 CS2850 CW2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  void copyString(char *sIn, char *sOut, int len) { int t = 0;
while (t < len) {
*(sOut + t) = *(sIn + t);
 } }
int stringLen(char *s) { int t = 0;
t++;
 }
while (*(s + t) != ’\0’) t++; return t;
void printMemory(struct space *mem) { int i = 0;
6

 while (i < mem-->len) {
 }
printf("%c", *(mem-->memory + i)); i++;
} printf("\n");
 void printSizes(struct space *mem) { int i = 0;
int c;
while (i < mem-->len) {
int n = *(mem-->sizes + i);
 int t = 10000; while (n > 9) {
c = n/t;
n = n -- c * t; t = t / 10;
if (c) {
 } }
c= n%10+’0’;
c= c%10+’0’; printf("%c", c); i++;
 }
        printf("%c", c);
        i++;
} printf("\n");
The plain text version of all codes in this document is available on the assignment Moodle page 202**4 CS2850 CW2: C mini-project.
B Pseudocode
Here you can find the pseudocode of the functions you need to implement in this assignment.
1: function void initializeMemory(int len, struct space *mem)
2: let mem->memory point to a dynamically allocated array of length len* sizeof(char)
3: let mem->sizes point to a dynamically allocated array of length len * sizeof(int)
4: set mem->len to len
5: i←0
6: while i is smaller than mem->len do
7: set the i-th entry of mem->memory to FREE
8: set the i-th entry of mem->sizes to FREESIZE
9: i←i+1
10: print mem->memory using printMemory
11: print mem->sizes using printSizes
1: function void cleanMemory(struct space *mem) 7
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ** 33 34 35 36 3**8 39 40 41 42 43 44 45

2: 3: 4: 5: 6: 7: 8: 9:
10:
1: 2: 3:
4: 5:
6: 7: 8: 9:
10: 11: 12: 13:
1: 2: 3: 4: 5: 6: 7: 8: 9:
1: 2: 3: 4: 5: 6:
7:
i←0
while i is smaller than mem->len do
set the i-th entry of mem->memory to FREE
set the i-th entry of mem->sizes to FREESIZE i←i+1
print mem->memory using printMemory print mem->sizes using printSizes free mem->memory
free mem->sizes
function int stackAllocator(int nbytes, struct space *mem) t0 ← 0
while t0 + nbytes is smaller than mem->len and the t0-th entry of mem->sizes is not FREESIZE do
t0 ← t0 + 1
if t0+ nbytes equals mem->len then
return mem->len t←0
while t is smaller than nbytes and t0 + t is smaller than mem->len do set the (t0 + t)-th entry of mem->memory to BUSY
set the (t0 + t)-th entry of mem->sizes to BUSYSIZE
t←t+1
set the t0-th entry of mem->sizes to nbytes return t0
function void deallocator(t0, struct space *mem) if t0 equals mem->len or is negative then
return
let nbytes be the value stored in the t0-th location of mem->sizes t←0
while t is smaller than nbytes do
set the (t0 + t)-th entry of mem->memory to FREE
set the (t0 + t)-th entry of mem->sizes to FREESIZE t←t+1
function int spaceScanner(int nbytes, struct space *mem) t0 ← 0
do
s←0
while s = 0 and t0 is smaller than mem->len do
t←0
while t0 +t is smaller than mem->len and the (t0 +t)-th entry of mem->sizes is FREESIZE
t←t+1
8

8:
9: 10: 11: 12:
1: 2: 3: 4: 5: 6: 7: 8: 9:
10: 11:
1: 2: 3: 4:
5: 6: 7: 8: 9:
10: 11: 12: 13:
1: 2: 3: 4: 5:
6: 7: 8: 9:
10:
if t is larger than nbytes then s←1
else
t0 ← t0 + 1 return t0
function int heapAllocatorQ3(int nbytes, struct space *mem) (for Q3) t0 ← spaceScanner(nbytes, mem)
if t0 = mem->len then
return t0 t←0
while t is smaller than nbytes do
set the (t0 + t)-th entry of mem->memory to BUSY
set the (t0 + t)-th entry of mem->sizes to BUSYSIZE t←t+1
set the t0-th entry of mem->sizes to nbytes return t0
function void increaseMemory(int nbytes, struct space *mem)
t ← mem->len
while the difference between t and mem->len is smaller than nbytes do
t ← 2(t + 1)
let s be a pointer to char s ←mem->memory
let a be a pointer to int a ←mem->sizes
l ←mem->len
call initializeMemory with arguments t and mem
copy the content of the character array pointed by s into mem->memory using copyString copy the content of the integer array pointed by a into mem->sizes using copyArray freesanda
function int heapAllocator(int nbytes, struct space *mem) (for Q4) t0 ←spaceScanner(nbytes, mem)
while t0 equals mem->len do
increaseMemory(nbytes, mem)
t0 ← spaceScanner(nbytes, mem)
t←0
while t is smaller than nbytes do
set the (t0 + t)-th entry of mem->memory to BUSY
set the (t0 + t)-th entry of mem->sizes to BUSYSIZE t←t+1
9

11: set the t0-th entry of mem->sizes to nbytes
12: return t0
1: function int readString(char **s)
2: t←0
3: c ← getchar()
4: allocate 1 byte in the heap using malloc
5: let *s point to the newly allocated memory
6: let **s be the null character
7: while c is not a new line character or EOF do
8: p ←*s
9: t←t+1
10: allocate a character array of t + 1 bytes in the heap using malloc
11: let *s point to the newly allocated memory
12: copy the content of the character array pointed by p into ∗s
13: free p
14: set the t-th entry of the newly allocated character array to c
15: set the (t + 1)-th entry of the newly allocated character array to the null character
16: c ← getchar()
17: ifcisEOFthen
18: return 0
19: return 1
請(qǐng)加QQ:99515681 或郵箱:99515681@qq.com   WX:codehelp

掃一掃在手機(jī)打開當(dāng)前頁
  • 上一篇:代寫com6516、代做 java 設(shè)計(jì)編程
  • 下一篇:代寫同花順公式 代寫文華指標(biāo)公式
  • 無相關(guān)信息
    合肥生活資訊

    合肥圖文信息
    急尋熱仿真分析?代做熱仿真服務(wù)+熱設(shè)計(jì)優(yōu)化
    急尋熱仿真分析?代做熱仿真服務(wù)+熱設(shè)計(jì)優(yōu)化
    出評(píng) 開團(tuán)工具
    出評(píng) 開團(tuán)工具
    挖掘機(jī)濾芯提升發(fā)動(dòng)機(jī)性能
    挖掘機(jī)濾芯提升發(fā)動(dòng)機(jī)性能
    海信羅馬假日洗衣機(jī)亮相AWE  復(fù)古美學(xué)與現(xiàn)代科技完美結(jié)合
    海信羅馬假日洗衣機(jī)亮相AWE 復(fù)古美學(xué)與現(xiàn)代
    合肥機(jī)場(chǎng)巴士4號(hào)線
    合肥機(jī)場(chǎng)巴士4號(hào)線
    合肥機(jī)場(chǎng)巴士3號(hào)線
    合肥機(jī)場(chǎng)巴士3號(hào)線
    合肥機(jī)場(chǎng)巴士2號(hào)線
    合肥機(jī)場(chǎng)巴士2號(hào)線
    合肥機(jī)場(chǎng)巴士1號(hào)線
    合肥機(jī)場(chǎng)巴士1號(hào)線
  • 短信驗(yàn)證碼 豆包 幣安下載 AI生圖 目錄網(wǎng)

    關(guān)于我們 | 打賞支持 | 廣告服務(wù) | 聯(lián)系我們 | 網(wǎng)站地圖 | 免責(zé)聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網(wǎng) 版權(quán)所有
    ICP備06013414號(hào)-3 公安備 42010502001045

    99爱在线视频这里只有精品_窝窝午夜看片成人精品_日韩精品久久久毛片一区二区_亚洲一区二区久久

          9000px;">

                91视频免费观看| 亚洲综合清纯丝袜自拍| 欧美国产一区二区在线观看| 日本不卡视频一二三区| 欧美日韩在线不卡| 亚洲视频一二三| 欧美视频在线一区二区三区| 亚洲精品国产无天堂网2021| 欧美日韩一级黄| 青青草成人在线观看| 欧美精品亚洲一区二区在线播放| 亚洲大片免费看| 2014亚洲片线观看视频免费| 成人午夜激情影院| 日韩中文欧美在线| 国产亚洲综合在线| 欧美视频日韩视频| 国产成人精品一区二区三区四区 | 99视频一区二区三区| 亚洲一级二级三级| 精品国产91洋老外米糕| 欧美自拍丝袜亚洲| 国产精品1区2区3区在线观看| 亚洲高清视频在线| 国产精品美女久久久久久久久久久 | 国产乱妇无码大片在线观看| 6080yy午夜一二三区久久| 东方欧美亚洲色图在线| 亚洲自拍欧美精品| 欧美sm极限捆绑bd| 色综合色狠狠综合色| 经典三级在线一区| 日韩主播视频在线| 亚洲三级电影全部在线观看高清| 欧美高清视频不卡网| 精品一区二区三区不卡| 丝袜美腿亚洲色图| 亚洲自拍都市欧美小说| 亚洲男帅同性gay1069| 精品国产污污免费网站入口| 91浏览器打开| 国产精品99久久不卡二区| 久久成人免费日本黄色| 日本女优在线视频一区二区| 亚洲6080在线| 视频一区欧美精品| 午夜久久电影网| 亚洲成人免费在线| 亚洲一级电影视频| 亚洲成人在线网站| 婷婷开心久久网| 日韩国产欧美在线观看| 性久久久久久久| 亚洲一区二区三区四区的| 综合久久综合久久| 亚洲精品日韩专区silk| 亚洲色大成网站www久久九九| 亚洲同性gay激情无套| 亚洲婷婷综合久久一本伊一区| 日韩一区欧美小说| 亚洲另类春色国产| 亚洲国产毛片aaaaa无费看| 亚洲精品日韩专区silk| 午夜av电影一区| 狠狠久久亚洲欧美| 成人av在线影院| 色综合色狠狠综合色| 欧美三级日韩在线| 精品国产99国产精品| 国产精品久久久久影视| 亚洲一区二区影院| 久久99热99| 99久久精品国产导航| 欧美精品一级二级三级| 国产日韩精品一区二区三区在线| 国产女人18毛片水真多成人如厕| 一区视频在线播放| 日韩av中文在线观看| 高清国产一区二区| 欧美日韩国产高清一区二区三区| 欧美变态凌虐bdsm| 亚洲欧美在线视频| 蜜臀久久99精品久久久久宅男| 国产成人免费xxxxxxxx| 884aa四虎影成人精品一区| 国产日韩欧美制服另类| 亚洲第一福利视频在线| 国产大陆a不卡| 制服丝袜国产精品| 国产精品国产精品国产专区不蜜| 午夜a成v人精品| 97久久精品人人做人人爽50路 | 欧美亚洲动漫精品| 久久色.com| 亚洲成人精品一区二区| 国产成人亚洲综合a∨猫咪| 欧美日韩和欧美的一区二区| 久久久久国产成人精品亚洲午夜| 亚洲一区二区三区精品在线| 国产精品综合网| 欧美乱妇23p| 亚洲男人电影天堂| eeuss鲁片一区二区三区| 欧美一级专区免费大片| 亚洲天堂2016| 国产v日产∨综合v精品视频| 欧美日韩另类一区| 国产精品色哟哟网站| 国产在线不卡一卡二卡三卡四卡| 91在线国产观看| 久久精品视频免费| 激情综合色播激情啊| 精品噜噜噜噜久久久久久久久试看| 亚洲自拍偷拍欧美| 欧美日韩在线观看一区二区| 亚洲精品成人精品456| 高清国产午夜精品久久久久久| 2024国产精品视频| 国产综合色在线| 久久这里只有精品首页| 久久电影网电视剧免费观看| 日韩欧美美女一区二区三区| 麻豆精品视频在线| 日韩精品一区二区三区四区视频 | 一区二区三区产品免费精品久久75| 国产成人综合网站| 国产日韩三级在线| 成人黄色小视频| 国产精品久久一卡二卡| 国产成人午夜片在线观看高清观看| 91精彩视频在线| 亚洲欧美欧美一区二区三区| 91精品福利在线| 天天操天天干天天综合网| 欧美日韩mp4| 日本欧美肥老太交大片| 久久九九国产精品| 99久久精品一区| 亚洲一区二区三区影院| 日韩欧美国产高清| 国产成人精品一区二区三区四区 | 高清在线观看日韩| 亚洲视频一区二区免费在线观看| 在线观看国产日韩| 男男成人高潮片免费网站| www一区二区| 色综合久久天天| 免费av网站大全久久| 久久久美女毛片| 色偷偷成人一区二区三区91| 午夜精品福利在线| 久久欧美一区二区| 91国产免费看| 国产麻豆视频精品| 亚洲精品国产a| 欧美xxxx在线观看| 色94色欧美sute亚洲13| 美国三级日本三级久久99| 欧美国产日韩一二三区| 欧美久久一二区| 成人免费观看av| 丝袜亚洲另类欧美| 欧美国产精品中文字幕| 欧洲精品在线观看| 经典三级在线一区| 午夜欧美在线一二页| 欧美精品一区二| 91啪亚洲精品| 国产一区二区三区四区在线观看| 亚洲人吸女人奶水| 久久伊人蜜桃av一区二区| 欧美在线观看一二区| 成人毛片在线观看| 狠狠色丁香久久婷婷综合_中| 午夜精品一区二区三区免费视频 | 欧美经典一区二区三区| 91精品国产高清一区二区三区 | 成人午夜电影久久影院| 日本中文字幕一区二区有限公司| 中文字幕日韩av资源站| 国产日韩欧美综合在线| 日韩免费在线观看| 欧美精品一级二级| 欧美日韩一级二级| 欧美性生活影院| 91看片淫黄大片一级在线观看| 国产一区二区不卡在线| 日韩电影免费在线| 亚洲成人自拍网| 一二三四社区欧美黄| 亚洲欧美日韩国产中文在线| 国产精品网友自拍| 国产欧美日本一区视频| 久久久久99精品一区| 国产亚洲视频系列| 久久精品亚洲乱码伦伦中文| 欧美精品一区二区三区很污很色的| 欧美电视剧在线观看完整版| 日韩一区二区三区高清免费看看| 91精品国产欧美一区二区成人|