C 中大型动态数组分配 (malloc) 期间的内存错误。它适用于较小的数组
Posted
技术标签:
【中文标题】C 中大型动态数组分配 (malloc) 期间的内存错误。它适用于较小的数组【英文标题】:Memory error during large dynamic array allocation (malloc) in C. It works fine with smaller arrays 【发布时间】:2022-01-22 13:37:58 【问题描述】:#include <stdio.h>
#include <stdlib.h>
int main()
int** arr;
int size_row,size_col,i,j;
arr = (int**) malloc(size_row*(sizeof(int*)));
printf("enter the size of the row\n");
scanf("%d",&size_row);
printf("enter the size of the column\n");
scanf("%d",&size_col);
for(i=0;i<size_row;i++)
*(arr+i) = (int*) malloc(size_col*(sizeof(int)));
for(i=0;i<size_row;i++)
for(j=0;j<size_col;j++)
printf("arr[%d][%d]= ",i,j);
scanf("%d",&arr[i][j]);
for(i=0;i<size_row;i++)
for(j=0;j<size_col;j++)
printf("arr[%d][%d][%p]=%d\n",i,j,&arr[i][j],arr[i][j]);
printf("\n");
此代码适用于较小的数组。但是,如果我输入行大小 = 9 和列大小 = 1000,则会显示分段错误(核心转储)。但是如果我把行大小 = 1000 列大小 = 9,它工作正常。为什么会出现这个内存错误?我正在使用 gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 编译器。提前致谢。
【问题讨论】:
arr = (int**) malloc(size_row*(sizeof(int*)));
执行此语句时您还没有初始化size_row
。
请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
【参考方案1】:
使用前未初始化size_row。
【讨论】:
也许您可以添加更多信息? printf("输入行的大小\n"); scanf("%d",&size_row); arr = (int**) malloc(size_row*(sizeof(int*)));以上是关于C 中大型动态数组分配 (malloc) 期间的内存错误。它适用于较小的数组的主要内容,如果未能解决你的问题,请参考以下文章