c - 为什么 C 中的 struct 即使在内存分配较少的情况下也能正常工作?
问题描述
C 中的 Malloc 函数分配传递给它的参数的内存大小(以字节为单位)。这里我的结构变量有两个整数值。所以结构的大小应该是 8 个字节。我只分配 1 个字节,它仍在工作。
为什么?
C (海合会)
#include <stdio.h>
#include <stdlib.h>
struct node{
int a;
int b;
}ab;
int main(){
struct node * nl=(struct node *)malloc(1); //I am allocating memory here
nl->b=89;
nl->a=45;
printf("%d %d %ld",nl->a,nl->b,sizeof(int));
}
解决方案
当您写入超过分配内存的末尾时,您会调用undefined behavior,这意味着您无法可靠地预测程序将做什么。它可能会崩溃,它可能会输出奇怪的结果,或者(在这种情况下)它看起来可以正常工作。
printf
通过进行看似无关的更改,例如添加未使用的局部变量或添加对调试的调用,可以改变未定义行为的表现方式。它也可以通过使用不同的优化设置或不同的编译器进行编译来改变。
程序可能会崩溃并不意味着它会崩溃。
推荐阅读
- sql - 如何处理动态查询
- javascript - jQuery 检查以测试 iframe 的内容未触发
- javascript - 为什么它适用于 nodejs 或任何其他 javascript 编译器?
- r - 如何测试数据框中的任何值是否超过限制
- google-api - Google API 调用:“此 URL 不支持 HTTP 方法 PUT。” URL 可能有什么问题?
- java - 基于两件事的重复数据删除数组
- javascript - 创建上传文件到谷歌云存储
- list - 为什么我在球拍中的递归函数给我传入的每个参数一个 0
- python - 为什么这个 if 语句不在 for 循环内执行?
- bootstrap-table - AJAX 数据返回但引导表未填充