Paste
#79026: error function
char** string_split(char *url,char sp,int *ret) //分割字符串,返回二维字符串表
{
int i=0,j=0,sum_of_sp=0,i_max=strlen(url); //i,j用于循环基数,sum_of_sp记录 '&' 的个数,i_max字符串的长度
int *index_list=NULL;
char **res=NULL;
for(i=0;i<i_max;i++){if(url[i]==sp)sum_of_sp++;} //计算'&' 个数有4个&则sum_of_sp=4
index_list=(int*)malloc(sizeof(int*)*(sum_of_sp+1)); //储存分割偏移量表index_list 比sum_of_sp多1,用于储存结束位置
for(i=0,j=0;i<=i_max;i++) //遍历url,记录偏移量到index_list
{
if(url[i]==sp || url[i]=='\0')
{
index_list[j]=i;
j++;
}
}
res=(char**)malloc(sizeof(char**)*(sum_of_sp+2)); //生成储存字段的二维表头
res[0]=(char*)malloc(sizeof(char)*(index_list[0]+1));
strncpy(res[0],url,index_list[0]);
res[index_list[0]]='\0';
//printf("%s \n",res[0]);
for(i=1;i<=sum_of_sp;i++)
{
res[i]=NULL;
res[i]=(char*)malloc(sizeof(char)*(index_list[i]-index_list[i-1]));
strncpy(res[i],url+index_list[i-1]+1,index_list[i]-index_list[i-1]-1); //复制字符
//printf("%s \n",res[i]);
}
*ret=sum_of_sp+1;
free(index_list); //释放偏移量表
return res;
}
/*have error
malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted
*/