
char *p = (char *)malloc(sizeof(char));p指向新开辟的一个字节的空间,那P+1呢?
展开全部
既然申请1个字节的内存就可以用其后面的内存,那么我们又何必给malloc加上size这个参数??
1, 申请1字节的内存, p+1虽然能用,但是这极有可能在运行时造成内存冲突。操作系统管理着内存,知道那些内存可用,哪些不可用。我们用malloc申请内存要给malloc加个长度参数,这就是告诉操作系统,这段内存已经被使用,别的程序不能用它了。从这个角度讲char *p = (char *)malloc(sizeof(char));后使用p+1是错误的。
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语言还要和学习操作系统原理, 算法相结合。
展开全部
同一楼
例如p是3200的话 那p+1就是3201
p在这里指的是地址~
回复二楼和三楼,
即使只申请了一个char 但是p+1仍然合法,仍然能够调用
即使在这里定义 int类型 p+1指向的仍然是下一个,因为前面定义的是char *p...
后面sizeof(char)里面填什么 跟返回的类型没有任何关系,填char返回1 填int返回2....然后用malloc开辟空间,然后强制转换为char*类型
例如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也是好使啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
由于你malloc只申请了一个char的空间,所以你只给P分配了空间,而P+1是无效的
可以在sizeof前乘上一个n(个数),来申请多个空间
可以在sizeof前乘上一个n(个数),来申请多个空间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指向该空间的下一个字节
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指向P所指向空间的下一个字节,因为char只占一个字节!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询