首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-12-04 
看看这个小程序到底哪里错了,运行没错,但是肯定有问题。void Test(void){char *str (char *) malloc(100)

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

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输出不是期望的, 甚至出现异常.

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

热点排行