#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);
}
我编辑了我的程序。在编译这个程序时,我得到一个错误“下标值既不是数组也不是指针也不是向量”。 我该如何分配内存?
答案 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尺寸,您可以根据需要使用相同的尺寸。
答案 1 :(得分:-1)
您无法在声明中直接在堆上分配大型数组。 您可以使用malloc分配大型数组,如下所示
#include <stdlib.h>
int *matrix = malloc(ROW * COLUMNs * sizeof(int));
始终使用列主要顺序来搜索元素。 可以在此处找到列主要订单的说明Accessing elements in a matrix
这里尺寸= 10000 在完成任务后,请释放内存
free(matrix);