看看这个小程序到底错哪了,运行没错,但是肯定有有关问题

看看这个小程序到底哪里错了,运行没错,但是肯定有问题。
void Test(void)
{
char *str = (char *) malloc(100);
    strcpy(str, “hello”);
    free(str);     
    if(str != NULL)
    {
     strcpy(str, “world”); 
printf(str);
}
}
我运行了一下,输出结果是world,但是肯定有问题,到底是什么问题呢?
c malloc

------解决方案--------------------
1. free(str)不会修改str本身的值, 因此if (str!=NULL)判断无意义
2. 释放的内存可能被别的程序使用. 因此第二次strcpy可能会踩别人的内存,导致别的程序异常.
3. 如果该内存被别的线程/进程使用, 在第二次strcpy和printf之间可能又被其他线程/进程改写, 从而导致printf输出不是期望的, 甚至出现异常.

出现问题一个概率问题, 如果你在一个不运行其他程序的电脑上反复测这个程序, 估计也发现不了问题; 但是如果在一个常年累月跑大量线程又反复执行这段代码, 那肯定会出问题.