#大家好,我是一名小bai,第一次用指针,出现问题后查了资料,说是指针内存分配错误,我也不是太懂,试了好多种方法,还是出错.
#求大佬救救小bai吧,给跪了...........................
#include<stdio.h>
#include<string.h>
#include<malloc.h>
void mp(char* name[])
{
char* temp=(char*)malloc(15);
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
{
if ((strcmp(name[i], name[i + 1] < 0))&&(NULL!=temp))
{
temp = name[i];
name[i] = name[i + 1];
name[i + 1] = temp;
}
}
free(temp);
}
}
main()
{
char country[5][15];
char* ht[5];
printf("请输入五个国家名:");
for (int i = 0; i < 5; i++)
{
scanf_s("%s",country[i],15);
ht[i] = country[i];
}
mp(ht);
printf("排序后:\n");
for (int i = 0; i < 5; i++)
{
printf("%s", ht[i]);
}
}
排序函数逻辑错了,代码修改如下:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
void mp(char* name[])
{
char* temp=(char*)malloc(15);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4-i; j++)
{
if ( (strcmp(name[j], name[j + 1]) < 0) &&(NULL!=temp)) //你的代码这里原来写错了
{
memset(temp,0,15);
strcpy(temp,name[j]);
memset(name[j],0,15);
strcpy(name[j],name[j+1]);
memset(name[j+1],0,15);
strcpy(name[j+1],temp);
/*temp = name[i];
name[i] = name[i + 1];
name[i + 1] = temp;*/
}
}
}
free(temp);
temp = 0;
}
int main()
{
char country[5][15];
char* ht[5];
printf("请输入五个国家名:");
for (int i = 0; i < 5; i++)
{
scanf_s("%s",country[i],15);
ht[i] = country[i];
}
mp(ht);
printf("排序后:\n");
for (int i = 0; i < 5; i++)
{
printf("%s\n", ht[i]);//这里加个回车
}
return 0;
}
你这个free temp要了你的命了
temp = name[i];这行代码会让你前面malloc(15)分配的空间变成野指针
整个name数组是静态分配的空间,是不能free的
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4-i; j++)
数组越界了