整理了一些有关内存管理测试题
类型一
图片.png
这道题有两个错误:
错误1:pszbuf并没有接收到申请空间的地址,所以给一个空指针拷贝字符串出错
错误2:申请的空间地址被ppszbuf保存,当函数调用结束后,该形参被释放,所以该空间的地址无法再被获取,即会出现内存泄露
如何改正:*ppszbuf = (char )malloc(BUFFER_SIZE);
图片.png
两个错误:
原因1:str并没有接收到开辟空间的地址,仍然为空指针,所以不能拷贝。
原因2:p变量接受了开辟空间的起始地址,但函数调用完毕后p被释放,该地址无法再被获取,造成内存泄露。
应该传参传指针的地址,用二级指针接受。开辟空间地址存在一级指针里。
图片.png
该程序有两个错误:
原因1:在函数调用结束后,p被释放,所以p中保存的字符串的地址未知,str仍然是空指针。
原因2:没有变量来接收函数的返回值
如何改正:
传参时传该指针的地址,用二级指针接受该地址,将字符串的地址保存在该二级指针指向的那块空间,即将该地址保存在原一级指针里。
图片.png
free释放之后要将指针置NULL。否则 为野指针,指向内存区域不可访问。
图片.png
这个程序乍一看是没有问题的,传参也正确,不过一点=定要注意内存开辟要释放,不然会造成内存泄漏。
错误一:申请空间未释放,造成内存泄露
错误二:str没有置NULL,会变为野指针(好的编程习惯)
图片.png
函数调用完毕后,形参会被释放。所以p不再存在。
类型二
图片.png
只拷贝了hello,没有拷贝‘\0’
可以对数组先初始化,或是将‘\0’拷贝过去。
图片.png
对变量没有没有初始化。
图片.png
如果你依然在编程的世界里迷茫,不知道自己的未来规划,对C/C++感兴趣,这里推荐一下我的学习交流圈:684478929,里面都是学习C/C++的,从最基础的C/C++【C++,游戏,黑客技术,网络安全】到网络安全的项目实战的学习资料都有整理,送给每一位C/C++小伙伴,希望能帮助你更了解C++,学习C++
网友评论