当我尝试使用文件维度作为行和列在 C 中创建矩阵时,为啥会出现错误?

Posted

技术标签:

【中文标题】当我尝试使用文件维度作为行和列在 C 中创建矩阵时,为啥会出现错误?【英文标题】:Why there is an error when i try to create a matrix in C using file dimension as row and columns?当我尝试使用文件维度作为行和列在 C 中创建矩阵时,为什么会出现错误? 【发布时间】:2021-12-30 12:05:34 【问题描述】:

我正在尝试使用文件尺寸创建矩阵,它们是 10kb 文件。我正在使用此函数计算文件尺寸

long calculateDim(char *path) 
FILE *fd= fopen(path,"r+");
fseek(fd,0,SEEK_END);
long dim= ftell(fd);
fclose(fd);
return dim;

矩阵码:

long dim1=calculateDim(path1);
long dim2=calculateDim(path2);
long matrix[dim1 + 1][dim2 + 1];

错误是:

进程以退出代码 139 结束(被信号 11:SIGSEGV 中断)

特别是它在矩阵创建的行中返回一个分段错误

【问题讨论】:

dim1dim2 有多大?那么您预计matrix 将占用多少字节?那个大小的对象会适合你的堆栈吗? (或者你应该使用动态内存?) dim1 和 dim2 为 10038,即文件大小(以字节为单位)。我还需要使用更大的文件。在这种情况下,矩阵将是 10038*10038 并且可以放入堆栈中 【参考方案1】:

你写道:

dim1 和 dim2 为 10038,即文件尺寸(以字节为单位)。我还需要使用更大的文件。在这种情况下,矩阵将是 10038*10038 并且可以放入堆栈中

如果您的矩阵要包含超过 1 亿个元素,每个元素占用 8 个字节,那么矩阵将占用 800 MB 的存储空间。

您声称这将适合堆栈。 为什么? 大多数应用程序的典型堆栈大小在 1 到 4 MB 之间。 我非常怀疑 800 MB 是否适合堆栈。

【讨论】:

以上是关于当我尝试使用文件维度作为行和列在 C 中创建矩阵时,为啥会出现错误?的主要内容,如果未能解决你的问题,请参考以下文章

在 swing 中创建运行时 jtable

3d数学 7 矩阵

检查给定行和列总和是不是只有 2 行的二进制矩阵

3D数学基础:图形与游戏开发笔记 第7~8章 矩阵

在 R 中,使用 rle(运行长度编码)的结果,包括命名的行和列标题

使用r自动选择.csv文件中的行和列