前面后面不是很相干的就不写了...我这里写的程序意思大概就是把people[]->money里一部分的字符串(非互异)进行统计,算出各个不一样的字符串占所有字符串数的比例。然后我就定义了一个*country[]来统计,运行说我的内存操作上有问题,应该就是这个country[]这个字符串数组的问题.......请帮忙看一下,该怎么改啊????char *country[MaxM];int n,m,i,j,k,l;double percent[MaxM];double num[MaxM]; i=0; country[i]=(char *)malloc(8*sizeof(char));//开辟内存,有错不? for(j=n-1;j>=n-m;j--){ //people[j]->country这个是从大到小排 num[i]=0; if (j==n-1){ country[i]=people[j]->country; num[i]++; i++; country[i]=(char *)malloc(8*sizeof(char)); } else{ for(k=0;k<i;k++){ //people[j]->country和country[]中已赋值的有相同的,i就不++了 if(*people[j]->country==*country[k]){ num[k]++; break; } } if(k>=i){ //不相同,给country[i]赋值 country[i]=people[j]->country; num[i]++; i++; country[i]=(char *)malloc(8*sizeof(char)); } } } for(l=0;l<i;l++){ percent[l]=(num[l]/m)*100; printf("%s %.1f\n",country[l],percent[l]); } for(l=0;l<MaxM;l++)//释放空间,有错不? free(country[l]);第一句打错了,不是people[]->money是people[]->country 。。。其他有错的也要告诉我啊
有点乱啊,释放空间和分配都没有错吧,但是中间的过程你看看是不是引用了非法的内存,最后释放的时候出错了,实在调不通给我发个全程序我看下 看了半天主要是指针太多了,但是有问题的就是这里// for(l=0;l<m;l++)//释放空间,有错不?// { // free(country[m]);// }我改了半天也没有改出来,不知道怎么弄的,指针太乱了,但是你把这个函数注释起来就可以正常运行了。。。实际这个小程序不会涉及到多少内存泄露,但是要是能正常释放当然好了,但是实在是我也不知道你的程序是搞了个什么意思,看的晕的,暂时只能这样了,反正就是这个函数的问题,你改改看怎么能弄好,好不