为什么我可以使用比分配的内存更多的内存
Why can I use more memory than allocated?
我一直在摆弄memset函数,结果是:
int* p = malloc(sizeof(int);
memset(p, 0, 10000);
我想知道为什么这是有效的。我只分配了5个字节的内存,但我可以用memset占用10000个。如果我可以占用比分配的更多的内存,为什么还要对内存进行malloc?有人能解释一下吗?
这是未定义的行为,在中可以这样做,但结果没有定义,在不可预测的情况下,在程序中可能崩溃。
在这种情况下,您只能写入分配的区域或sizeof(int) * 5
。
为什么C不阻止你这么做?这是因为语言设计的理念是程序员知道他们在做什么,不要妨碍他们。
我想知道为什么这是有效的。
它无效。
如果我可以占用比分配的更多的内存,为什么还要对内存进行malloc?有人能解释一下吗?
因为你做不到。
您分配的内存溢出。程序的行为是未定义的。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配