realloc函数
来源:互联网 发布:淘宝网内衣买家秀 编辑:程序博客网 时间:2024/06/05 05:03
static void t_rvq_index(){ ifstream ss; string ttemp = parameters_path + "new_features.txt"; ss.open(ttemp.c_str()); float * psift = (float*)malloc(sizeof(float)); int totalsift=0; /**frame_id,以及对应的 num of sift, sift id*/ int framelabel, nsift, siftlabel;//dimension float varfloat; while(ss>>framelabel) { ss>>nsift; psift = (float*)realloc(psift, (totalsift+nsift)*(sift_dimension)*sizeof(float));//不断重新分配内存 /** 原型:extern void *realloc(void *mem_address, unsigned int newsize); 语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。 新的大小一定要大于原来的大小不然的话会导致数据丢失! 功能:先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回, 如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放 原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。*/ for(int i=0;i<nsift;i++) { ss>>siftlabel; ss>>varfloat; ss>>varfloat; ss>>varfloat; for(int j=0;j<sift_dimension;j++) { ss>>psift[ (totalsift+i)*(sift_dimension) + j ]; } } totalsift += nsift; } total_rvq = new RVQ(rvq_code_level, rvq_ncentroids, sift_dimension, 0);// total_rvq->rvq_learn_codebook(totalsift, sift_dimension, psift); ttemp = parameters_path + "sift_rvq_codebook.txt"; total_rvq->rvq_codebook_write(ttemp.c_str()); delete total_rvq; total_rvq=0; free(psift); ss.close();}