malloc - Malloc中内存分配期间分配大小的意义
问题描述
我有一个 double 类型的指针,它指向使用 malloc 分配的内存,我在数组中分配了 12 个元素:
double *y = (double*)malloc(sizeof(double) * 12);
我的问题如下。假设我以这种方式分配内存:
double *y2 = (double*)malloc(sizeof(double*) * 12);
将 * 添加到括号大小的双精度会有什么区别?这样的改变有什么意义吗?我是在计算指向双精度的指针的大小而不是双精度的大小吗?我问这样一个问题是因为当我计算 y2[0] 的工厂并说 y2[0] 等于 -0.02 时,答案是 0.00,而当我计算 y1[0] 和 y1[ 的工厂的答案时0] 等于 -0.02 答案是 0.02。
解决方案
sizeof (double)
对于值数组的元素大小是正确的double
。 将是指向的指针sizeof (double *)
数组的正确值。double
在大多数 64 位架构上,两者sizeof (double)
和sizeof (double *)
恰好是 8,但在大多数 32 位架构上,sizeof (double)
是 8,但是sizeof (double *)
是 4,所以有区别。
如果你得到不同的结果sizeof (double *)
,很可能是因为你的分配太小,结果你遇到了堆缓冲区溢出和内存损坏。
推荐阅读
- cmake - 如何从 CMake 更改文件时间戳?
- android - 在 Asynctask 中加载 GridView 位图
- sql - SQL Server 2008R2 sys.dm_exec_procedure_stats - 上次执行时间异常
- jenkins - Jenkinsfile - 发布操作避免状态代码重复
- r - R:用于热图的 read.table
- visual-studio-code - 如何在调试模式下更改当前行颜色?
- angular - 使用 ControlValueAccessor 的有效信息
- javascript - 在 PHP 错误中发送带有其他字符串的输入文件
- formatting - Lotus Notes / 突出显示公共邮箱中的特定发件人
- scala - 在 Flink 中调试自定义 Pipeline Transformer