gpt4 book ai didi

c - 在 C 中使用 malloc 进行矩阵分配是否有任何限制?

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:21 26 4
gpt4 key购买 nike

我正在使用动态分配,因为我需要一些内存空间来定义 3 个矩阵。当我使用 2 个矩阵(请参阅下面的最小工作环境)时,即我将第三个矩阵作为注释,程序运行良好并给出了预期的结果。但是,当我包含第三个矩阵时,出现段错误,核心已转储!我不知道使用 malloc 的动态分配是否有限制。任何帮助将不胜感激。谢谢!

#include<stdio.h>
#include<malloc.h>

int main(int argc, char **argv)
{
int rows=160, cols=1999000;

float *mat1 = (float *)malloc(rows * cols * sizeof(float));
float *mat2 = (float *)malloc(rows * cols * sizeof(float));
//float *mat3 = (float *)malloc(rows * cols * sizeof(float));

int i, j;

for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
{
mat1[i * cols + j]=i+j;
mat2[i * cols + j]=i-j;
//mat3[i * cols + j]=i*j;
}
}

for(i=0;i<2;i++)
{
for(j=0;j<6;j++)
{
printf("R[%d][%d] = %f\n", i, j, mat2[i * cols + j]);
}
}
}

最佳答案

很可能如评论中所述,您的内存不足。检查你的 mallocs 的返回:我的猜测是你的第三个分配返回 NULL 并且当你试图影响它的值时这会触发段错误。

[编辑]

float *mat3 = (float *)malloc(rows * cols * sizeof(float));
if(mat3 == NULL)
{
printf("Not enough memory");
return ENOMEM;
}

[EDIT2]

另外正如评论中所说,使用 malloc 会强制您获得连续的内存。考虑到您需要的大量空间,这种设计可能不合适。例如,您可能想使用链表,它允许您“分段”您的内存。

无论如何,请确保您的硬件配置(可用内存)能够支持您编写的代码。

关于c - 在 C 中使用 malloc 进行矩阵分配是否有任何限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22399731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com