一、动态内存常见错误
1.对NULL指针的解引用操作。
因此,要在动态内存分配以后,进行判断。
2. 对动态开辟空间的越界访问。
这个例子i过大,造成了越界访问。因此在使用的时候应该注意自己所使用的内存大小有没有超过所申请的内存大小。
3.对非动态内存进行free释放。
free函数释放的是堆区里申请的空间。而不是栈区的空间。
4.使用free释放动态分配内存的一部分。
在上面这个例子,p已经不指向动态内存的起始位置了,因此不可以释放。
5.对一块动态内存多次释放。
一次free释放之后,p成为野指针,因此不可进行第二次free操作。
6.动态开辟内存忘记释放。
这是一个常见错误,如果动态开辟的内存忘记释放,那么将造成内存泄漏问题。
二、笔试题
题目一:
该程序是错误的,因为test运行之后,p申请的内存空间并没有给str,因此str无法打印出hello world。而且p申请的内存并没有进行free操作,造成了内存泄漏。
题目二:
该题虽然return p了,但是在Getmemory函数结束之后,p销毁了。因此p成为了野指针。
题目三:
该题可以正常打印出hello,因为vp接收的是str的地址,因此p申请到内存空间时,str就是其首地址。因此可以打印出。