国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【nginx】nginx 源碼學(xué)習(xí)

Cciradih / 1950人閱讀

摘要:新手學(xué)習(xí),模擬思想編寫程序數(shù)組中是實(shí)際上存在的最小空間大小個(gè)數(shù)內(nèi)存使用完了的時(shí)候正常的,在范圍內(nèi)的往后面偏移一位返回新的,下一個(gè)元素的存放位置只能通過這樣子,將個(gè)字節(jié)的內(nèi)存轉(zhuǎn)為整數(shù)

新手學(xué)習(xí)nginx,模擬nginx思想編寫程序 nginx 數(shù)組
#include "stdio.h"
typedef unsigned char u_char;//windows 中 是 byte

struct array_s {
    u_char*     startpos;
    size_t      maxlength;
    size_t      size;
    size_t      length; //實(shí)際上存在的最小空間大小個(gè)數(shù)  1

};

typedef struct array_s array_t;



array_t* array_create( size_t length, size_t size);
void array_destory(array_t * array);
void* array_push(array_t* a);

array_t* array_create( size_t length, size_t size)
{
    array_t* a;
    a = (array_t*)malloc(sizeof(array_t));
    if (a==NULL){return NULL;}

   // a->startpos=(u_char*)_aligned_malloc(size*length,16);
    a->startpos = (u_char*)malloc(size * length);
    if (a->startpos == NULL) {return NULL;}
    a->maxlength = length;
    a->size = size;
    a->length = 0;
    return a;
}

void array_destory(array_t * array)
{
    free(array->startpos);
    free(array);
}


void* array_push(array_t* a)
{
    u_char *startpos,*newstartpos;
    size_t size;

    if (a->length == a->maxlength) //內(nèi)存使用完了的時(shí)候....
    {
        size = a->maxlength * a->size;

        newstartpos = (u_char*)malloc(size * 2);

        if (newstartpos != NULL)
        {
            memcpy(newstartpos,a->startpos,size);
            free(a->startpos);
            a->startpos = newstartpos;
            a->maxlength *= 2;
        }else{
            printf("memerror!");
            return NULL;
        }
    }

    //正常的,在范圍內(nèi)的array......
    newstartpos = (u_char*)a->startpos + a->length * a->size; // 往后面偏移一位 .....
    a->length++;
    return newstartpos; //返回新的,下一個(gè)元素的存放位置......
}




dump(array_t * a)
{
    int tmp=0;
    for(size_t i=0;ilength;++i)
    {
        memcpy(&tmp,(a->startpos + i*a->size),a->size);//只能通過這樣子,將4個(gè)字節(jié)的內(nèi)存轉(zhuǎn)為整數(shù)
        printf("%d-->%x,size=%d,value_is:%d
",i,a->startpos + i*a->size,a->size,tmp);
    }
}

typedef struct{
    int length;
    char* data;
} string;

dump1(array_t * a)
{
    string* tmp;

    for(size_t i=0;ilength;++i)
    {
        tmp = (string*)(a->startpos + i*a->size);
        printf("%d-->%x,size=%d,value_is : %s,strlen=%d
",i,a->startpos + i*a->size,a->size,tmp->data,tmp->length);
    }
}

int main(int argc,char ** argv)
{
    array_t * myarray = array_create(10,sizeof(int));
    int* tmp=0;

    for(int i = 200 ; i< 228 ; ++i)
    {
        tmp=array_push(myarray);
        *tmp = i * i;
    }
   dump(myarray);

    array_t * myarray1;

    string* tmp1;
    char tmp2[255]="111";

    for(int i=0; i< 3;++i)
    {
        myarray = array_create(10,sizeof(string));

        for(int i=0; i< 9;++i)
        {
            tmp1 = (string*)array_push(myarray);
            sprintf(tmp2,"---%d---",i);
            tmp1->data = malloc(strlen(tmp2)+1);        //這里調(diào)試花了好長(zhǎng)時(shí)間, 是因?yàn)椋?沒有給字符串指針分配內(nèi)存空間, 就往字符串指針里面復(fù)制內(nèi)容, 導(dǎo)致堆溢出。
            if (tmp1->data == NULL){printf("error!");}
            memset(tmp1->data,"