使用指针后出现访问位置时冲突错误

#大家好,我是一名小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]);
    }
}


img


#错误就是这样纸的,好烦,再次感谢大佬!!!

排序函数逻辑错了,代码修改如下:


#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++)

数组越界了