程序有什么问题

void GetMemory(char *p)
{
    p=(char *)malloc(100);
}
void Test(void)
{
    char *str=NULL;
    GetMemory(str);
    strcpy(str,"hello world");
    printf(str);
}

答:程序崩溃
因为GetMemory并不能传递动态内存,Test函数中的str一直都是NULL。strcpy(str,”hello world”);将使程序崩溃。

char *GetMemory(void)
{
    char p[]="hello world";
    return p;
}
void Test(void)
{
    char *str=NULL;
    str=GetMemory();
    printf(str);
}

答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原先的内容已经被清除,新内容不可知

void Test(void)
{
    char *str=(char *)malloc(100);
    strcpy(str,"hello");
    free(str);
    if(str!=NULL)
    {
        strcpy(str,"world");
        printf(str);
    }
}

答:篡改动态内存区的内容,后果难以预料,非常危险
因为free(str)之后,str成为野指针,if(str!=NULL)不起作用。