用malloc函数开辟二维数组的有关问题
用malloc函数开辟二维数组的问题
为什么block1可以正常执行但是block2会出现内存错误,想了很久没有明白,求解答
------解决思路----------------------
恐怕你分配的内存大小已经超出了一个进程用户可用内存的大小了
------解决思路----------------------
malloc(indexSize + rows* rowSize);
40400 * 4 + 40400 * 4 * 40400 //这得有多大, 哪里有这么多内存让你申请和释放
------解决思路----------------------
用文件读写模拟内存读写。参考_lseeki64函数。
为什么block1可以正常执行但是block2会出现内存错误,想了很久没有明白,求解答
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void** malloc2d(int rows, int cols, int size)
{
printf("%d\t%d\t%d\n",rows,cols,size);
int j;
int rowSize = cols * size;
int indexSize = rows * sizeof(void *);
void **a = (void **) malloc(indexSize + rows* rowSize);
char *dataStart = (char *) a + indexSize;
for(j = 0; j < rows; j++){
printf("%d\n",j);
a[j] = dataStart + j * rowSize;
}
return a;
}
int main(){
int i,rows,cols,row,col;
rows = cols = 40400;
row = 3;col = 2;
int** block1 = (int**)malloc2d(row,col,sizeof(int));
printf("end of block1,begin of block2\n");
int** block2 = (int**)malloc2d(rows,cols,sizeof(int));
free(block1);
free(block2);
return 0;
}
------解决思路----------------------
恐怕你分配的内存大小已经超出了一个进程用户可用内存的大小了
------解决思路----------------------
malloc(indexSize + rows* rowSize);
40400 * 4 + 40400 * 4 * 40400 //这得有多大, 哪里有这么多内存让你申请和释放
------解决思路----------------------
用文件读写模拟内存读写。参考_lseeki64函数。