社区
C++ 语言
帖子详情
malloc到底分配了多少内存?
Microsues
2011-07-23 12:54:59
#include<iostream>
using namespace std;
int main()
{
int* pt = (int*)malloc(1);
for(int i=0;i<5;++i){
*(pt+i) = i;
cout<<*(pt+i)<<endl;
}
return 0;
}
在代码中,用malloc分配了1byte的空间,为什么可以给pt指向的内存赋5个int呢?
什么情况下会出错呢?
...全文
207
8
打赏
收藏
malloc到底分配了多少内存?
#include using namespace std; int main() { int* pt = (int*)malloc(1); for(int i=0;i<5;++i){ *(pt+i) = i; cout<<*(pt+i)<<endl; } return 0; } 在代码中,用malloc分配了1byte的空间,为什么可以给pt指向的内存赋5个int呢? 什么情况下会出错呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
TitanQuest
2011-07-23
打赏
举报
回复
这种行为要坚决杜绝
RLib
2011-07-23
打赏
举报
回复
按楼主的情况来分析,malloc分配的内存绝对不只是1byte,其中包括分块信息和内存对齐等。如果malloc返回的指针刚好到了页尾,而下一页不可写,那会异常。
seKnight121
2011-07-23
打赏
举报
回复
首先对malloc(size_t)进行分析,其作用为分配size_t大小的空间,然后将其首地址以void*类型传递出去,此处经过显示类型转换传递给int类型的指针pt,然后lz利用地址递增的方式对对应地址内的数据进行解析。
楼主在此处应该将其理解为类似于数组的形式,Pt只是指向了新开辟的空间的首地址,就像将数组的首地址赋值为pt一样,依次向后读取,很容易越界。道理同数组一样!
ccnunlp
2011-07-23
打赏
举报
回复
#include<iostream>
using namespace std;
int main()
{
int* pt = (int*)malloc(5 * sizeof(int));
for(int i=0;i<5;++i){
*(pt+i) = i;
cout<<*(pt+i)<<endl;
}
return 0;
}
hui12345685
2011-07-23
打赏
举报
回复
内存越界!
kotrue
2011-07-23
打赏
举报
回复
1.假如你分配了一个int类型的空间,然后你向这个空间赋值,这些数字会存放在pt之后的一段内存。这段内存不属于你,它们可能覆盖了其它的变量。这样是不安全的。 再者,就算你现在这个5个值存进去了。过一段时间,别的变量有可能把你给覆盖掉。 所以不安全。。。。。。 要用多少就得分配多少。
2.你分配了一个字节 却装了5个int型,太.......
一句话:关于内存:你要用多少,就得分配多少,不是你的就不要碰!!
呔妖怪来嘛
2011-07-23
打赏
举报
回复
越界了吧
pamtry
2011-07-23
打赏
举报
回复
这种情况下已经出错了
首先,“可以”不代表“正确”,就像你也可以声明char array[1];但是依旧可以调用array[10] = 'a';一样
编译器只是根据指针类型进行地址计算,并不会代替程序员做有效性的把关。所有这类操作都可以视为指针越界,即修改了未知的内存位置,存在隐性的风险
所以,这既是C/C++在内存方面给予程序员极大的便利,也算是很多人对C/C++指针诟病的一个缘故
C++第3课:C++
内存
泄露检测原理及案例实战
本课程具体的内容主要包括C++
内存
泄露案例、VS2015
内存
泄露检测、野指针、VirtualAlloc/HeapAlloc/
malloc
/new的区别、C++堆和栈的
内存
管理、栈简介、堆简介、堆与栈区别、栈的
内存
分配
、Windows的虚拟
内存
技术、...
malloc
是如何
分配
内存
的?
大家好,我是小林。 很早之前写了一篇图解虚拟
内存
的文章:真棒!20 张图揭开
内存
管理的迷雾,瞬间豁然开朗 最近想多写一些
内存
管理的文章,这次我们就以
malloc
动态
内存
分配
为切入点,我在文中也做了小实验:
malloc
是如何
分配
内存
的?
malloc
分配
的是物理
内存
吗?
malloc
(1) 会
分配
多大的
内存
? free 释放
内存
,会归还给操作系统吗? free() 函数只传入一个
内存
地址,为什么能知道要释放多大的
内存
? 发车! Linux 进程的
内存
分布长什么样? 在 Linux 操作系统中,
malloc
是如何
分配
内存
的
malloc
是如何
分配
内存
的
malloc
和free的实现与原理 什么场景下
malloc
() 会通过 brk()
分配
内存
?又是什么场景下通过 mmap()
分配
内存
?
malloc
(1) 会
分配
多大的虚拟
内存
? free 释放
内存
,会归还给操作系统吗? 为什么不全使用`mmap()` 或`brk()` free() 函数只传入一个
内存
地址,为什么能知道要释放多大的
内存
?......
【操作系统】
malloc
是如何
分配
内存
的?
【操作系统】
malloc
是如何
分配
内存
的
malloc
如何
分配
内存
今天,我们来学习
malloc
分配
内存
的两种方法,brk()和mmap()
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章