返回列表 发帖

一个内存申请和释放的问题

有这段代码,偶申请了一个存放2维数组的内存空间 这是申请部分: char* result=(char*)malloc(al+bl); memset(result,0,all); char** temp=(char**)malloc(bl); for(i=0;i=(char*)malloc(all); memset(temp,0,al+bl); } 这是释放的代码: free(result); for(i=0;i); temp=NULL; } free(temp); result=NULL; temp=NULL; 可是运行的时候总会出错,提示: damage: after normal block(#42) at 0X004300D0

一个内存申请和释放的问题

所有代码如下,这是一个计算2个小于256位整数相乘的程序.. #include #include #include int ctoi(char c) {int j=0; j=c-48; return j; } char itoc(int i) {char c; c=i+48; return c; } void change(char*str,int l,int t) {int i; int j; if(t==0) {for(i=0;i==0) str=48; } else for(i=0;i=(char*)malloc(all); memset(temp,0,al+bl); printf("temp[%d] malloc ok!\n",i); } for(i=bl-1;i>=0;i--) { temp1=ctoi(b); for(j=al-1;j>=0;j--) { temp2=ctoi(a[j]); end1=temp1*temp2+k; k=end1/10; yu=end1%10; c=itoc(yu); temp[bl-1-i][all-al+j]=c; if((j==0)&&(end1>=10)) {c=itoc(k); temp[bl-1-i][all-al+j-1]=c; } } k=0; for(m=0;m,all,i); for(i=0;i[j]); printf("\n"); } end2=0; k=0; printf("chage ok!\n"); for(j=all-1;j>=0;j--) {for(i=0;i[j]); end2+=k; yu=end2%10; k=end2/10; result[j]=itoc(yu); end2=0; } printf("--------------------------------------------------------------------------------\n"); for(i=0;i); printf("\nok!\n"); free(result); for(i=0;i); temp=NULL; } free(temp); result=NULL; temp=NULL; }

TOP

一个内存申请和释放的问题

哈哈,问题已经解决,问题的原因是free的时候,temp指向的内存已经不是刚刚开始分配的那快内存了,所以会发生错误.可以在获取分配的内存时保存起示地址,最后释放之前在把地址赋给分配的变量,就可以了.最后,不要忘记消灭野指针... 一个类似的问题的解决的代码: #include #include #include void main(void) {char **str; int i,size=4; str=(char**)malloc(sizeof(char**)*size); memset(str,0,sizeof(char**)*size); for(i=0;i=(char*)malloc(sizeof(char*)*size); memset(str,0,sizeof(char*)); } char*temp[4]={str[0],str[1],str[2],str[3]}; printf("init str address:\n\ str0:%x\n\ str1:%x\n\ str2:%x\n\ str3:%x\n", str[0],str[1],str[2],str[3]); str[0]="kiki love juan!\n"; str[1]="what?\n"; str[2]="haha,really?\n"; str[3]="of course,i love her"; printf("after give the string:\n\ str0:%x\n\ str1:%x\n\ str2:%x\n\ str3:%x\n", str[0],str[1],str[2],str[3]); for(i=0;i=temp; printf("after modify the string:\n\ str0:%x\n\ str1:%x\n\ str2:%x\n\ str3:%x\n", str[0],str[1],str[2],str[3]); free(str[0]); free(str[1]); free(str[2]); free(str[3]); } 完整的代码: #include #include #include #define SIZE 256 int ctoi(char c) {int j=0; j=c-48; return j; } char itoc(int i) {char c; c=i+48; return c; } void change(char*str,int l,int t) {int i; int j; if(t==0) {for(i=0;i==0) str=48; } else for(i=0;i=(char*)malloc(all); memset(temp,0,al+bl); middle=temp;//这里用middle数组来保存地址 printf("temp[%d] malloc ok!\n",i); } for(i=bl-1;i>=0;i--) { temp1=ctoi(b); for(j=al-1;j>=0;j--) { temp2=ctoi(a[j]); end1=temp1*temp2+k; k=end1/10; yu=end1%10; c=itoc(yu); temp[bl-1-i][all-al+j]=c; if((j==0)&&(end1>=10)) {c=itoc(k); temp[bl-1-i][all-al+j-1]=c; } } k=0; for(m=0;m,all,i); for(i=0;i[j]); printf("\n"); } end2=0; k=0; for(j=all-1;j>=0;j--) {for(i=0;i[j]); end2+=k; yu=end2%10; k=end2/10; result[j]=itoc(yu); end2=0; } printf("--------------------------------------------------------------------------------\n"); for(i=0;i); printf("\nok!"); free(result); for(i=0;i=middle;//恢复分配的起示地址 free(temp); temp=NULL; middle=NULL; } free(temp); result=NULL; temp=NULL; getchar(); }

TOP

一个内存申请和释放的问题

没有看懂,具体怎么释放

TOP

返回列表 回复 发帖