打印

面试题

[复制链接]
880|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2012-8-24 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前几天的一道面试题,一直没想明白, 核心问题是这样的:

定义一个数组 比如:

int *a = (int*) malloc(sizeof(int)*20);
a[0]=0; a[1]= 1; .............a[19]= a[19];

现在,a指针 开辟的20个int内存已经存满了,想存第21个数据

问题1: 扩展这个数组,注意内存连续性(就是在将第21个数据 放在紧接着a[19] 地址后面的那块内存里 )

我的想法是:

int *p = (a+20); //指向 a[20]
*p = 20;

这样是不是相当于在一个未知的内存上写数据,应该是不合法的吧, 但是我想不到别的办法。
另外第二个类似
问题2:

内存操作:将指针unsigned char* ptr的内容向后移动4个字节

相关帖子

沙发
hsbjb| | 2012-8-24 18:29 | 只看该作者
用malloc重新申请大于20的内存,然后将原来的数组复制过去。

使用特权

评论回复
板凳
pkat| | 2012-8-24 18:33 | 只看该作者
只能重新申请然后复制
那些内存并未分配给你所以你不该使用,假如那些内存已经被用于其他功能,那你的行为会造成什么后果自己想
或者你可以不用new,直接定义一个数组然后在它后面写数据,看看什么后果
局部数组的内存后面绝对是有用的内存,这点倒是可以肯定,连续压栈么

使用特权

评论回复
地板
秋天落叶| | 2012-8-26 15:51 | 只看该作者
比较基础的面试题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝