当我尝试使用文件维度作为行和列在 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 中断)
特别是它在矩阵创建的行中返回一个分段错误
【问题讨论】:
dim1
和 dim2
有多大?那么您预计matrix
将占用多少字节?那个大小的对象会适合你的堆栈吗? (或者你应该使用动态内存?)
dim1 和 dim2 为 10038,即文件大小(以字节为单位)。我还需要使用更大的文件。在这种情况下,矩阵将是 10038*10038 并且可以放入堆栈中
【参考方案1】:
你写道:
dim1 和 dim2 为 10038,即文件尺寸(以字节为单位)。我还需要使用更大的文件。在这种情况下,矩阵将是 10038*10038 并且可以放入堆栈中
如果您的矩阵要包含超过 1 亿个元素,每个元素占用 8 个字节,那么矩阵将占用 800 MB 的存储空间。
您声称这将适合堆栈。 为什么? 大多数应用程序的典型堆栈大小在 1 到 4 MB 之间。 我非常怀疑 800 MB 是否适合堆栈。
【讨论】:
以上是关于当我尝试使用文件维度作为行和列在 C 中创建矩阵时,为啥会出现错误?的主要内容,如果未能解决你的问题,请参考以下文章