我已声明以下内容:
long long int *a[100000]//全局声明
a[i]
的动态声明:a[i]=(long long int*)calloc(sizeof(long long int),100000); for(i=0;i<100000;i++) { for(j=0;j<100000;j++) printf("%lld ",a[i][j]); printf("\n"); }
经过循环后,我的程序显示段错误
因为我得到了一些测试用例的正确答案和其他一些测试用例的段错误,这意味着我没有访问非法内存。
我认为问题在于声明如此大尺寸的 long long int
数组。
最佳答案
注意二维数组的定义及其元素的分配:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
long long int* a[10][10]; //AS I MENTIONED IN THE COMMENT UNDER THE QUESTION
int i, j;
for(i=0;i<10;i++) {
for(j=0;j<10;j++) {
a[i][j] = calloc(sizeof(long long int),10);
}
}
for(i=0;i<10;i++) {
for(j=0;j<10;j++)
printf("%lld ",a[i][j]);
printf("\n");
}
return 0;
}
还要注意,根据您的版本,您将尝试分配 100000x100000x100000 字节的 RAM(四万亿字节??)。
关于创建大型二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29539088/