摘要:你是否在总是听到“内存越界”,“指针指向了非法地址”等常见问题呢?但是在面试过程中总有一些学术严谨(装13)的面试官给这一类问题取个名字-踩内存。如果你没听过,是不是就显得没品味(正常)。简而言之,踩内存就指访问了不应该访问的内存地址。
关于踩内存
踩内存就是访问了不应该访问的内存,常见有几种:
1、越界踩;
越界踩的意思就是踩坏的内存就在你分配内存的旁边,也就是在界限附近,出现这种情况一般是由于申请的内存小了。举个例子:
char *p; p = malloc(5);strcpy(p, "hello");
strcpy拷贝了6个字节(字符串“hello”有6个字节,包括最后的‘0’),但是指针p指向所分配的内存只有5个字节,所以就越界了。
当然还有一种情况就是数组越界,这也是新手时常发生的,这也属于一种越界踩,除此之外,越界踩还有一种比较难发现的情况,就是栈溢出的情况,我们知道栈内存一般都是有固定大小的,如果一个函数里面变量过多大就会导致栈溢出,出现越界踩。举个例子:
int func(){
char