char *p = (char *)malloc(sizeof(char));p指向新开辟的一个字节的空间,那P+1呢?

 我来答
furious_tauren
2011-10-25 · TA获得超过4057个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:842万
展开全部
既然申请1个字节的内存就可以用其后面的内存,那么我们又何必给malloc加上size这个参数??

1, 申请1字节的内存, p+1虽然能用,但是这极有可能在运行时造成内存冲突。操作系统管理着内存,知道那些内存可用,哪些不可用。我们用malloc申请内存要给malloc加个长度参数,这就是告诉操作系统,这段内存已经被使用,别的程序不能用它了。从这个角度讲char *p = (char *)malloc(sizeof(char));后使用p+1是错误的。
追问
意思是说虽然p+1可以使用,但在后续的操作中,系统有可能还会把p+1的内存分配给别人使用,造成内存冲突是吗?那malloc只是让系统认为我使用了多大的内存空间,实际上使用了多少空间它并不限制,只是无论用多少它都会认为是我申请的那么大的空间吗?
追答
理解的正确,补充一点:
malloc会根据你传的size大小找一块合适的内存给你, 如果你老是使用1作为malloc的参数,那么操作系统是有可能只找了长度为1 的空闲内存给你的。这样的话你现在使用*(p+1),程序立马崩溃!

注:如果你读点操作系统关于内存管理方面的资料,再来理解这个问题就简单了。学c语言还要和学习操作系统原理, 算法相结合。
naxiesuowei
2011-10-25 · TA获得超过157个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:121万
展开全部
同一楼
例如p是3200的话 那p+1就是3201
p在这里指的是地址~

回复二楼和三楼,
即使只申请了一个char 但是p+1仍然合法,仍然能够调用
即使在这里定义 int类型 p+1指向的仍然是下一个,因为前面定义的是char *p...
后面sizeof(char)里面填什么 跟返回的类型没有任何关系,填char返回1 填int返回2....然后用malloc开辟空间,然后强制转换为char*类型
追问
那使用时char *p = (char *)malloc(sizeof(char));与char *p = (char *)malloc(n*sizeof(char));有什么区别,即使只申请一个但p+1也是好使啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HiLittleGirl
2011-10-25 · TA获得超过192个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:253万
展开全部
由于你malloc只申请了一个char的空间,所以你只给P分配了空间,而P+1是无效的
可以在sizeof前乘上一个n(个数),来申请多个空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dripple11
2011-10-25 · TA获得超过464个赞
知道小有建树答主
回答量:430
采纳率:0%
帮助的人:311万
展开全部
指向该空间的下一个字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
boy小白
2011-10-25
知道答主
回答量:34
采纳率:0%
帮助的人:11.2万
展开全部
指向P所指向空间的下一个字节,因为char只占一个字节!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式