牛客网C++刷题七
2020-03-30 07:47
169 查看
下面代码会出现什么问题?
void GetMemory( char **p, int num ) { *p = (char *) malloc( num );} void Test( void ) { char *str = NULL; GetMemory( &str, 100 ); strcpy( str, "hello" ); printf( str ); }
参考答案:
1.申请失败判断,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句
*p = (char *) malloc( num );
后未判断内存是否申请成功,应加上:
if ( *p == NULL ) { ...//进行申请内存失败处理 } 同时应考虑num>0;
2.未释放堆内存 动态分配的内存在程序结束之前没有释放,应该调用free, 把malloc生成的内存释放掉,关键在与free(str)之后,是否有str=NULL;如果没有那么肯定就是存在野指针的
3. printf(str) 改为 printf("%s",str),否则可使用格式化 字符串攻击
改正:
void GetMemory(char **p, int num){ if(num<=0) printf("申请的内存空间要大于零!\n"); *p = (char*)malloc(num); if(*p==NULL) printf("申请内存失败!\n"); } void test(){ char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello world"); printf("%s\n", str); free(str); str = NULL; }
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- C++ 牛客网做题笔记【1100题总结】
- C++ 牛客网做题笔记【1200题总结】
- 2016年的C++常见的面试问题详解~搬至牛客网~strcpy
- 牛客网C++知识点整理(持续更新)
- 牛客网(搜狗2015 C++工程师笔试题)
- C++ 牛客网做题总结
- C++ 牛客网做题笔记【300题总结】
- 牛客网(搜狗2015 C++工程师笔试题)
- 牛客网C++编程题(一) 二维数组中的查找
- 牛客网中c++题目及其知识点详解
- 牛客网-华为在线编程004--C++字符串的分割
- 牛客网( C/C++工程师能力评估)
- 牛客网c++工程师测试知识点整理
- C++后台开发面试总结(摘抄自牛客网)
- 牛客网C++编程题(二) 替换空格
- C++ 牛客网做题笔记【400题总结】
- C++ 牛客网做题笔记【800题总结】
- 牛客网DNA片段C/C++
- c++ 牛客网刷题 Day1
- C++ 牛客网做题笔记【500题总结】