摘要:新手学习,模拟思想编写程序数组中是实际上存在的最小空间大小个数内存使用完了的时候正常的,在范围内的往后面偏移一位返回新的,下一个元素的存放位置只能通过这样子,将个字节的内存转为整数
新手学习nginx,模拟nginx思想编写程序 nginx 数组
#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; //实际上存在的最小空间大小个数 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) //内存使用完了的时候.... { 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; } } //正常的,在范围内的array...... newstartpos = (u_char*)a->startpos + a->length * a->size; // 往后面偏移一位 ..... a->length++; return newstartpos; //返回新的,下一个元素的存放位置...... } dump(array_t * a) { int tmp=0; for(size_t i=0;i编译length;++i) { memcpy(&tmp,(a->startpos + i*a->size),a->size);//只能通过这样子,将4个字节的内存转为整数 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;i length;++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); //这里调试花了好长时间, 是因为, 没有给字符串指针分配内存空间, 就往字符串指针里面复制内容, 导致堆溢出。 if (tmp1->data == NULL){printf("error!");} memset(tmp1->data," ",sizeof(tmp1->data)); //printf("====%x,%d ",tmp1->data,i); memcpy(tmp1->data,tmp2,strlen(tmp2)+1); tmp1->length=strlen(tmp1->data); } //char* tmp1="111111111111111111111111"; /* string* tmp2=(string*)myarray->startpos; */ /* printf("%s ",tmp2->data); */ /* printf("tmpx=%x,tmps=%s,%x,%s,max:%d,sizeof=%d ",tmp,tmp,tmp1,tmp1,myarray->length,sizeof(char[255])); */ //tmp1 = array_push(myarray); //tmp1="23432412321asfdsfasfasdf"; //tmp1 = array_push(myarray); //tmp="sdafadosifjiodsajfoisdajfoiasdjf"; dump1(myarray); array_destory(myarray); } }
cl array.c结果
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/39157.html
摘要:在这里使用学而思网校的录像设备,记录每天学习的内容执行潘森执行潘森执行潘森赵俊峰红黑树景罗红黑树景罗配置三叉树田志泽新建模块马运运配置田志泽田志泽田志泽李乐田志泽田志泽文件系统 在这里使用学而思网校的录像设备,记录每天学习的内容: 2019-07-15 ~ 2019-07-19 07-18 nginx http 执行 by 潘森 07-17 nginx http 执行 by 潘森 07...
摘要:在这里使用学而思网校的录像设备,记录每天学习的内容闫昌李乐阶段李乐李乐李乐李乐李乐李乐马运运李乐李乐李乐源码集群闫昌源码闫昌源码主从复制李乐源码施洪宝源码施洪宝韩天 在这里使用学而思网校的录像设备,记录每天学习的内容: 2019-06-24 ~ 2019-06-28 06-27 nginx by 闫昌 06-26 nginx module by 李乐 06-25 nginx http ...
摘要:本文将从源码从此深入分析配置文件的解析,配置存储,与配置查找。在学习配置文件的解析过程之前,需要先了解一下模块与指令的一些基本知识。 运营研发团队 李乐 配置文件是nginx的基础,对于学习nginx源码甚至开发nginx模块的同学来说更是必须深究。本文将从源码从此深入分析nginx配置文件的解析,配置存储,与配置查找。 看本文之前读者可以先思考两个问题: 1.nginx源码中随处可以...
摘要:下面的参数是根据需要在压缩或解压档案时可选的。备注了解过程省略这里添加了模块生成文件使用系统库没有用到库使用系统库这些路径是要了解的这是配置文件 资源1: 官网: http://nginx.org资源2: 官方学习资源, wiki, nginx安装之wiki介绍资源3: 编译选项列表资源4: nginx源码下载列表,当前Stable版本是nginx-1.14.0,资源5...
阅读 2595·2021-11-17 09:33
阅读 3936·2021-10-19 11:46
阅读 910·2021-10-14 09:42
阅读 2252·2021-09-22 15:41
阅读 4204·2021-09-22 15:20
阅读 4628·2021-09-07 10:22
阅读 2302·2021-09-04 16:40
阅读 811·2019-08-30 15:52