解决分段错误

问题描述:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

void main() { 
    int i,j; 
    int *u = malloc(10000 * 10000 * sizeof(int)); 
for (i=0; i<10000; i++) 
    { 
     for(j=0;j<10000;j++) 
     { 
      u[i][j]=i+j; 
     } 
    } 
    free(u); 
} 

我编辑了我的程序。当编译这个程序时,我得到一个错误“下标值既不是数组也不是指针也不是矢量”。 我该如何分配内存?解决分段错误

+3

[大数组大小分段故障]的可能的复制(http://*.com/questions/1847789/segmentation-fault-on-large-array-sizes) –

+0

我认为标准堆Windows上的大小约为8MB,假设你使用的是32位系统,'double u [10000] [10000];'尝试分配大约48MB。 – George

+0

我知道如何使用malloc分配内存数组,但我不知道如何分配内存的矩阵? – Armaa

您已分配的内存为一维数组,你的记忆试图将其用作二维数组。还有,你需要做的,你的代码稍有改变:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() { 
    int i,j; 
    int *u = malloc(10 * 10 * sizeof(int)); 
    for (i=0; i<10; i++) 
    { 
     for(j=0;j<10;j++) 
     { 
      u[10*i +j]=i+j; // this is how you can use it 
     } 
    } 
    for (i=0; i<10; i++) 
    { 
     for(j=0;j<10;j++) 
     { 
      printf("%d ",u[10 *i +j]); 
     } 
     printf("\n"); 
    } 
    free(u); 
    return 0; 
} 

请注意,我已经使用了尺寸为10 * 10,你可以做任何你需要的大小相同。

Check-here

+0

感谢您的回答 – Armaa

+0

致谢@Barmar的评论。 – Rishi

您不能在声明中直接在堆上分配大型数组。 您可以分配使用malloc大数组如下

#include <stdlib.h> int *matrix = malloc(ROW * COLUMNs * sizeof(int));

始终使用列主要为了搜索元素。 说明列优先的顺序可以在这里找到Accessing elements in a matrix

这里的大小= 10000 你总是完成后你的任务,*

free(matrix);

+0

我需要一个矩阵阵列不 – Armaa

+0

(#包括 的#include 的#include 无效的主要(){ INT I,J; INT * U = malloc的(10000 * 10000 *的sizeof(int)的) ; 为(I = 0;我 Armaa

+1

@ user7671105它应该是'u [10000 * i + j]' – Barmar