帮个忙看看

rainer7 2004-08-11 09:04:42
int *p;
p = (int *)malloc(sizeof(int));
p[0] = 1;
p[1] = 2;
...为何可以定义很多个p数组?malloc不是开一个大小为sizeof(int)的连续空间吗,而p[0]就占了这一个空间啊,那p[1]、p[2]又占的是哪来的空间?
...全文
150 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mskia 2004-08-11
  • 打赏
  • 举报
回复
malloc 只是返回新分配空间的指针。上面的那段程序只是分配了一个 int 的空间。

至于使用时没有出错,只是运气好而已,没有越界。

可以写个p[ 100000 ]来试试看,多半被操作系统强行关闭。
rainer7 2004-08-11
  • 打赏
  • 举报
回复
若我想动态分配一个数组,数组大小不定,不能用malloc而要用calloc了?
rainer7 2004-08-11
  • 打赏
  • 举报
回复
100个都能输出!我试了!那我若想安全的用p[1]...就只有用calloc了?
sms88 2004-08-11
  • 打赏
  • 举报
回复
对于指针存在着越界的问题。比如说,我们还能访问字符串‘0’以后的东西。但着是未定义的。
p[1]、p[2],就是按p[0]这个开头往下按数据结构的大小走
RookieStar 2004-08-11
  • 打赏
  • 举报
回复
你这样看:
p[0] <=> p+0
p[1] <=> p+1
……
这里事实上就是对指针p的作指针加法,这个操作没有语法限制,但是否能访问就要看是否分配过内存了。
Kusk 2004-08-11
  • 打赏
  • 举报
回复
C++语法不处理数组越界,所以程序语法完全正确,可以通过编译。但执行则是错误的。
Dong 2004-08-11
  • 打赏
  • 举报
回复
当然可以的,只是不安全而已(指针越界),p[1]的空间随时有可能被系统分配了。

你喜欢的话还可以输出p[2]呢。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧