标题:
一个内存申请和释放的问题
[打印本页]
作者:
x86
时间:
2005-9-27 14:59
标题:
一个内存申请和释放的问题
有这段代码,偶申请了一个存放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
作者:
x86
时间:
2005-9-27 17:12
标题:
一个内存申请和释放的问题
所有代码如下,这是一个计算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; }
作者:
x86
时间:
2005-9-27 21:28
标题:
一个内存申请和释放的问题
哈哈,问题已经解决,问题的原因是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(); }
作者:
sunshine-v
时间:
2005-9-28 20:06
标题:
一个内存申请和释放的问题
没有看懂,具体怎么释放
欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/)
Powered by Discuz! 7.2