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

这个程序为何还是可以输出.

2012-10-20 
这个程序为什么还是可以输出....#include stdafx.h#includestdlib.h#include string.hvoid GetMemor

这个程序为什么还是可以输出....
#include "stdafx.h"
#include<stdlib.h>
#include "string.h"
void GetMemory(char **p,int num)
{
*p = (char*)malloc(num);
}

int _tmain(int argc, _TCHAR* argv[])
{
char *str = NULL;
GetMemory(&str,100);
strcpy(str,"Hello");
free(str);
if(str != NULL)
strcpy(str,"world!!!!");//////
printf("\n str is %s",str);
getchar();
return 0;
}

我理解的是虽然free(str);了,但是str没有 = NULL;str仍然指向那块内存,strcpy(str,"world!!!!");
但是照理说strcpy(str,"world!!!!");有问题啊!!!
PS:程序退出后,另有堆的问题...

[解决办法]
你理解的很对。strcpy也的确有问题,但并不是内存溢出就一定会程序崩溃。如果str指向的内存区不被其它地方再次引用,写写这块内存也未必造成程序崩溃。
[解决办法]
问题是没溢出啊
strcpy等函数在操作时,不会检查参数的合法性
[解决办法]
str指向的内存没被重新分配,应该就不会出问题
[解决办法]
看看 strcpy 的源码
[解决办法]
你看msdn对strcpy的解释,你会发现,当中有1句话跟2楼得说法是一致的。
如下:
No overflow checking is performed when strings are copied or appended. The behavior of strcpy is undefined if the source and destination strings overlap.

热点排行