今天面试,记得有两题是:
1.执行以下程序时会发生什么?
char *p=(char*)malloc(1000);
p=p+10;
free(p);
2.创建一个2GB大小的文件.
第一个我回答是内存泄漏.
第二个一点都不懂
LARGE_INTEGER li,lo;
li.QuadPart = i64;//或设置li.LowPart和li.HighPart;
SetFilePointerEx(h,li,&lo,FILE_BEGIN);
1 malloc是申请内存空间的命令,这里的p指向这块空间的首地址,后面p=p+10人为地改变了首地址,导致后面的释放空间命令free指向的首地址不是所申请空间的首地址,所以程序出现异常。
问题1 如Snow_Ice11111(雪上加冰) 所说,会出现程序异常
malloc和free要对应的使用,而且确保释放的起始地址与分配时相对应
如果不对应,释放时就不知道要释放多少内存
问题1. malloc 为p分配了一地址,是把堆上的一块地址的首地址指向了p,同时为了上p能管理这块内存肯定还要做一些其他的事,比如这块内存的大小,存放的数据类型什么的。但是p = p+10之后就问题来了, 因为这只是简单的把p+10的地址赋值给p ,以前的信息都没有了,所以free的时候就有问题了。