世界杯红牌 / 2025-05-16 09:30:16

社区

C语言 帖子详情 为什么要分配内存? wenxian8 2011-04-28 05:05:50 int main(void)

{

srand((unsigned)time(NULL));

int a[3];

for (int i=0; i<5; i++)

{

a[i]= rand()%100;

printf("%d %d\n", &a[i],*(&a[i]), a[i]);

}

for (i=0; i<5; i++)

{

printf("%d \n", *(&a[i]),a[i]);

}

return 0;

}

通过这段程序: 虽然我只定义 数组大小为 3 ,但是 我仍然初始化 5 个数组元素,而第 4, 5个元素都能存储一个值。最后也能正确的输出 第4,5个数组元素的值。

我只知道 存储一个变量的值,必须首先进行分配内存,才能使用这块内存,为什么啊?

可是 我认为:有时候,不必分配内存,也能使用这个内存空间。

请各位高手解析下,发表下自己的观点,谢谢了,

...全文

259 19 打赏 收藏 为什么要分配内存? int main(void) { srand((unsigned)time(NULL)); int a[3]; for (int i=0; i<5; i++) { a[i]= rand()%100; printf("%d %d\n", &a[i],*(&a[i]), a[i]); } for (i=0; i<5; i++) { printf("%d \n", *(&a[i]),a[i]); } return 0; } 通过这段程序: 虽然我只定义 数组大小为 3 ,但是 我仍然初始化 5 个数组 复制链接

扫一扫 分享 转发到动态 举报

写回复 配置赞助广告取 消

确 定

用AI写文章 19 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 wenxian8 2011-04-28 打赏举报 回复

17 楼说的 非常透切了,看来只有深刻理解的高手,才能说出自己的观念。 david_ray 2011-04-28 打赏举报 回复 代码多了,这样很容易出错,注意编程习惯 冬冬冬 2011-04-28 打赏举报 回复

其实都是需要申请内存才能使用 只是向Int 等基本类型是自动申请的内存空间 而像指针 这种就要申请内存了。 你的数组能使用超出申请范围的内存空间 说先先明确数组其实相当于指针 你有了这个指针当然就可以访问你这地址的内容了。。。。。

像 int *p ; *p=23;这样就是错误 为什么 因为你没有给指针P申请内存 也就是说你不知道他指向的是哪个地址 你一赋值当然就出现内存泄露。。。。

而int *p; int a=23; p=&a 这种就可以了 为什么 首先基础类型自动申请 然后你的指针有指向的地址 也就是a的地址 觅食的猫猫 2011-04-28 打赏举报 回复 把自己的书本分类摆放一下不就明白了嘛~ wenxian8 2011-04-28 打赏举报 回复

还有 编译器,并不检查 程序里的数组下标是否 越界, 编译器认为 程序员是聪明人,不会犯这种低级错误, 而我就是 故意 通过 犯这个错误来了解编译器的。 pathuang68 2011-04-28 打赏举报 回复 [Quote=引用 8 楼 delelebug 的回复:]

引用 6 楼 delelebug 的回复:

现在是个假设:

假设你女朋友脚踏两只船,周1,3,5,7和你约会,周2,4,6和另一男子约会。

现在你有两种处理方式:

1、你不知道你女朋友的事,并且也按她的要求,只是每周1,3,5,7去找她,那么你们(你,她,他)就会平安相处。

2、有一天,假设是周2,你想你女朋友了,这时候你去找她,然后发现了所有真相,于是。。。(最终闹过之后分手)

……

[/Quote]

人才!

要是这样的话,谁还会愿意做正统的程序员呢,肯定愿意做黑客了嘛。 wenxian8 2011-04-28 打赏举报 回复

其实 我也知道:分配内存,是为了方便操作使用这块内存,告诉我们:内存里存储的值在哪里,就像酒店里每个房间一样,都有自己的房间编号,某某人住在哪个房间里。 子达如何 2011-04-28 打赏举报 回复 LZ的思考很深入呀,我也想知道为什么,为什么有时候出错,有时候又是正确的呢?

LZ可以把5改成10000,如果还成功的话,说明这个方法可以节省很多内存:) pjl1119 2011-04-28 打赏举报 回复 大神很多啊! 张小毛 2011-04-28 打赏举报 回复 bdmh老大每次都回复都那么简短精炼!!! 猫已经找不回了 2011-04-28 打赏举报 回复 有时候,你打饭不排队,也能打到饭。

有时候,你红灯过马路却被车撞了。

有时候,这个东西,很没个谱啊。 张小毛 2011-04-28 打赏举报 回复 [Quote=引用 6 楼 delelebug 的回复:]

现在是个假设:

假设你女朋友脚踏两只船,周1,3,5,7和你约会,周2,4,6和另一男子约会。

现在你有两种处理方式:

1、你不知道你女朋友的事,并且也按她的要求,只是每周1,3,5,7去找她,那么你们(你,她,他)就会平安相处。

2、有一天,假设是周2,你想你女朋友了,这时候你去找她,然后发现了所有真相,于是。。。(最终闹过之后分手)

3、其实你背地里已经知道你女朋友的事了,你故意周……

[/Quote]

刚才打错了

现在是个假设:

假设你女朋友脚踏两只船,周1,3,5,7和你约会,周2,4,6和另一男子约会。

现在你有下列处理方式:

1、你不知道你女朋友的事,并且也按她的要求,只是每周1,3,5,7去找她,那么你们(你,她,他)就会平安相处。

2、有一天,假设是周2,你想你女朋友了,这时候你去找她,然后发现了所有真相,于是。。。(最终闹过之后分手)

3、其实你背地里已经知道你女朋友的事了,你故意周2去找她,然后把那个男人干掉,这样你就拥有你女朋友的全部而不是一半了。

解释如下:

1、你是个正统的程序员。

2、你是一个粗心的程序员。

3、你是黑客

哈哈,歪解完毕(我是流氓我怕谁)。 ww2000e 2011-04-28 打赏举报 回复 http://hi.baidu.com/quanzhou722/blog/item/ea3bc11c96d3989986d6b6b0.html

看看这个 张小毛 2011-04-28 打赏举报 回复 现在是个假设:

假设你女朋友脚踏两只船,周1,3,5,7和你约会,周2,4,6和另一男子约会。

现在你有两种处理方式:

1、你不知道你女朋友的事,并且也按她的要求,只是每周1,3,5,7去找她,那么你们(你,她,他)就会平安相处。

2、有一天,假设是周2,你想你女朋友了,这时候你去找她,然后发现了所有真相,于是。。。(最终闹过之后分手)

3、其实你背地里已经知道你女朋友的事了,你故意周2去找她,然后把那个男人干掉,这样你就拥有你女朋友的全部而不是一半了。

解释如下:

1、你是个正统的程序员。

2、你是一个粗心的程序员。

3、你是黑客

哈哈,歪解完毕。 wenxian8 2011-04-28 打赏举报 回复

还是没有说出,我的疑问: 为什么首先进行分配内存,才能使用这块内存。为什么没有分配到的那块内存,也能使用那个内存空间。

希望 有高手,能说出 您的深刻理解。 张小毛 2011-04-28 打赏举报 回复 当然也可以这样做,但是前提你应该知道你这样做的后果,如果你覆盖的地方(比较合适)的话,且你能找到这种合适的方式,你是个黑客,

如果不能,也不知道结果什么样的,那你只是个粗心的程序员! 我真的是琦琦 2011-04-28 打赏举报 回复 当你没有定义,而是用了越界的数组时,不会提示你错误,但是会出现一些不可预知的内容,或者是其它情况;碰巧这块内存没有地方使用,不然你就修改了其它数据内容了。。。 就想叫yoko 2011-04-28 打赏举报 回复 写内存越界

很危险 bdmh 2011-04-28 打赏举报 回复 访问越界索引,只是把指针移动了一个sizeof(int),而那个位置如果是可访问的内存,就会读出那里的数据,但这种情况要自己避免 C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的。

问题2:给结构体变量分配之后,是否还要给每个成员分配,还是只给不能确定大小的成员分配?

问题3:如果是要每个成员分配内存,那么释放的时候是不是每个成员都要单独释放?指针加一之后,又怎么做?

C\C++中结构体变量与结构体指针内存分配问题?... 为什么需要动态内存分配? 传统数组的缺点:

1,数组的长度必须实现预定,且是常整数,不能是变量,

例如:

inta[5]; //正确

int len=5; int a[len]; //error

2,传统形式定义的数组,该数组内存程序员无法手动释放,在一个函数运行期间,系统为该函数中的数组所分配的空间会一直存在,直到该函数运行完毕,数组的空间才会被系统释放。

3... 什么是内存对齐?如何计算内存对齐?为什么要内存对齐? a变量占四个字节,b变量的对齐数为8,所有b应该从偏移量为8处开始储存(4~7均不是对齐数的整数倍),c变量的对齐数为1,所以c应该从偏移量为17处开始储存,所以得到的应该是17,简单来说就是按照成员的定义顺序,依次为其分配内存,分配内存的起始偏移位置应该是该成员类型大小的整数倍,最后结构体变量所占大小应该是成员最大对齐数的整数倍。a变量占四个字节,b变量的对齐数为1,所有b应该从偏移量为4处开始储存,c变量的对齐数为8,所以c应该从偏移量为8处开始储存,所以得到的应该是16,............ android为每个应用程序分配的内存大小是多少,Android为每个应用分配多少内存?... 熟悉Android内存分配机制的朋友都知道,Android为每个进程分配内存时,采用弹性的分配方式,即刚开始并不会给应用分配很多的内存,而是给每一个进程分配一个“够用”的内存大小。那Android到底为每个应用分配多少内存呢?我们可以实际测试一下:以本人手上的努比亚NX510J手机为例:privatevoidgetMaxMemoryInfo(){Runtimert=Runtime.get... 深入理解malloc内存分配函数 最近想多写一些内存管理的文章,这次我们就以 malloc 动态内存分配为切入点,我在文中也做了小实验:

目录

1、Linux 进程的内存分布长什么样?

2、malloc 是如何分配内存的?

什么场景下 malloc() 会通过 brk() 分配内存?又是什么场景下通过 mmap() 分配内存?

malloc() 分配的是物理内存吗?

3、malloc(1) 会分配多大的虚拟内存?

3.1、free 释放内存,会归还给操作系统吗?

4、为什么不全部使用 mmap 来分配内存?

5、既...

C语言

70,008

社区成员

243,256

社区内容

发帖 与我相关 我的任务 C语言 C语言相关问题讨论 复制链接

扫一扫 分享 确定 社区描述 C语言相关问题讨论 社区管理员

加入社区

获取链接或二维码

近7日

近30日

至今

加载中

查看更多榜单

社区公告

暂无公告 试试用AI创作助手写篇文章吧

+ 用AI写文章

弹个车上牌要多久
玲珑手机VPN