看看这个小程序到底错哪了,运行没错,但是肯定有有关问题
看看这个小程序到底哪里错了,运行没错,但是肯定有问题。
------解决方案--------------------
1. free(str)不会修改str本身的值, 因此if (str!=NULL)判断无意义
2. 释放的内存可能被别的程序使用. 因此第二次strcpy可能会踩别人的内存,导致别的程序异常.
3. 如果该内存被别的线程/进程使用, 在第二次strcpy和printf之间可能又被其他线程/进程改写, 从而导致printf输出不是期望的, 甚至出现异常.
出现问题一个概率问题, 如果你在一个不运行其他程序的电脑上反复测这个程序, 估计也发现不了问题; 但是如果在一个常年累月跑大量线程又反复执行这段代码, 那肯定会出问题.
void Test(void)我运行了一下,输出结果是world,但是肯定有问题,到底是什么问题呢?
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
c
malloc
------解决方案--------------------
1. free(str)不会修改str本身的值, 因此if (str!=NULL)判断无意义
2. 释放的内存可能被别的程序使用. 因此第二次strcpy可能会踩别人的内存,导致别的程序异常.
3. 如果该内存被别的线程/进程使用, 在第二次strcpy和printf之间可能又被其他线程/进程改写, 从而导致printf输出不是期望的, 甚至出现异常.
出现问题一个概率问题, 如果你在一个不运行其他程序的电脑上反复测这个程序, 估计也发现不了问题; 但是如果在一个常年累月跑大量线程又反复执行这段代码, 那肯定会出问题.