C语言,关于字符串数组的内存问题,求帮助来看一下我的程序!感激不尽

前面后面不是很相干的就不写了...我这里写的程序意思大概就是把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 。。。其他有错的也要告诉我啊
最新回答
晚春里

2024-10-13 10:22:10

有点乱啊,释放空间和分配都没有错吧,但是中间的过程你看看是不是引用了非法的内存,最后释放的时候出错了,实在调不通给我发个全程序我看下

看了半天主要是指针太多了,但是有问题的就是这里
// for(l=0;l<m;l++)//释放空间,有错不?
// {
// free(country[m]);
// }
我改了半天也没有改出来,不知道怎么弄的,指针太乱了,但是你把这个函数注释起来就可以正常运行了。。。实际这个小程序不会涉及到多少内存泄露,但是要是能正常释放当然好了,但是实在是我也不知道你的程序是搞了个什么意思,看的晕的,暂时只能这样了,反正就是这个函数的问题,你改改看怎么能弄好,好不