解决分段错误

时间:2017-05-07 17:48:37

标签: c

#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); 
}

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

2 个答案:

答案 0 :(得分:1)

您已为单维数组分配了内存,并且您尝试将其用作二维数组。您需要对代码进行一些细微的更改:

#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

答案 1 :(得分:-1)

您无法在声明中直接在堆上分配大型数组。 您可以使用malloc分配大型数组,如下所示

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

始终使用列主要顺序来搜索元素。 可以在此处找到列主要订单的说明Accessing elements in a matrix

这里尺寸= 10000 在完成任务后,请释放内存

free(matrix);

相关问题