您的位置:首页 > 职场人生

IT面试

2016-05-25 21:26 288 查看
1、

char* GetMemory(void)

{

char p[] = “Welcome to AMOI”;

return p;

}

void main(void)

{

char* str = NULL;

str = GetMemory();

printf(str);

}

运行main函数的结果如何?你觉得该段代码是否存在什么问题?

答:

p是局部变量,创建的是临时空间。当GetMemory()函数被调用后,返回指针地址给str,同时p所指的内存释放,此时str变为野指针,出现系统输出错误。

2、

void GetMemory(char** p, int len)

{

*p = (char*)malloc(len);

}

void main(void)

{

char* str;

GetMemory(&str, 100);

strcpy(str, “Hello World”);

printf(str);

}

运行main函数的结果如何?你觉得该段代码是否存在什么问题?

答:

 1,调用GetMemory( str )后, str并未产生变化,依然是NULL.只是改变的str的一个拷贝的内存的变化    

 2,strcpy( str, "hello world" );程序运行到这将产生错误。

 3,new的时候有可能内存出错,应该在*p = (char *) malloc( num ); 后判断内存是否申请成功,应加上:

     if ( *p == NULL )

   {

     ...//进行申请内存失败处理

   }

4,动态创建的内存没释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: