c - 无法在 C 中分配内存
问题描述
我想定义一个 3D 数组/指针来存储我的计算结果:
#include <stdio.h>
int main(void) {
float ***ww;
int i, j, k;
int n1 = 3000, n2 = 6000, n3 = 9000;
ww = floatalloc3(n1, n2, n3); /* floatalloc3 is a self-defined function used to allocate memory space for 3D array/pointer */
for (i = 0; i < n1; i++) {
for (j = 0; j < n2; j++) {
for (k = 0; k < n3; k++) {
ww[i][j][k] = 0.0;
}
}
}
free(**ww);
free(*ww);
free(ww);
return 0;
}
但是弹出一个错误说cannot allocate 648000000000 bytes: Cannot allocate memory
。那么我该如何解决这样的问题,有什么想法吗?
是否可以将数据拆分并存储到不同的核心?
解决方案
您尝试分配的内存量似乎是巨大的:6480 亿字节加上 2 级间接的开销!您的系统可能不允许您分配那么多内存。
您应该测试 的返回值floatalloc3
以检测分配失败。事实上,发布此自定义函数的源代码以确定其正确性将很有用。
另请注意,3free
次调用可能不足以释放分配的块,但如果没有源代码floatalloc3
,只能推测。
推荐阅读
- python - 为什么这个错误说我将两个参数传递给了 destroy() ,即使我只传递了一个?
- c# - 带有 Xamarin 的 BLE 主机
- r - 如何参考我的表格中的一个数字(在 R 中为 100%)使用 tidyverse 获得百分比?
- c# - MAUI 项目,无法导航到新页面
- javascript - 为什么我的 .parentNode 返回未定义?
- ios - 为 iOS 创建矩阵堆栈:将矩阵重置为标识
- html - 如何使元素相对于所有其他元素的大小为 100%?
- ethereum - web3 提供的地址无效,大小写校验和测试失败
- statistics - 非感兴趣变量的相等值的配对 t 检验与多元回归
- java - Spring WebClient 配置全局重试逻辑