在结构中动态分配一个**指针
dynamically allocate an **pointer in a struct
我正在尝试学习如何在结构中分配二维数组,但它总是出现段错误。我知道如何在结构之外分配一个二维数组,但我不知道为什么当我将它移入结构时它会出现段错误。
/*program to allocate a 2d array and fill it with 0's and then print it.*/
#include<stdio.h>
#include<stdlib.h>
typedef struct stuff
{
int **arr;
}stuff;
int main()
{
stuff x;
int i,j;//loop counters
//allocate 2d array
x.arr = (int**)malloc(sizeof(int*)*4);
for(i=0; i<4; i++)
x.arr[i] = (int*)malloc(sizeof(int)*4);
//intialize 2d array to 0
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
x.arr[i][j] = 0;
//print 2d array
for(i=0; i<4; i++);
for(j=0; j< 4; j++)
printf("arr[%d][%d] = %d \n", i ,j ,x.arr[i][j]);
return 0;
}
您在最后一个 i
循环中多了一个分号。这会导致您访问错误的内存地址,因为 j
循环以 i
值 4 运行,这是越界的。
将for(i=0; i<4; i++);
更改为for(i=0; i<4; i++)
,一切正常
我正在尝试学习如何在结构中分配二维数组,但它总是出现段错误。我知道如何在结构之外分配一个二维数组,但我不知道为什么当我将它移入结构时它会出现段错误。
/*program to allocate a 2d array and fill it with 0's and then print it.*/
#include<stdio.h>
#include<stdlib.h>
typedef struct stuff
{
int **arr;
}stuff;
int main()
{
stuff x;
int i,j;//loop counters
//allocate 2d array
x.arr = (int**)malloc(sizeof(int*)*4);
for(i=0; i<4; i++)
x.arr[i] = (int*)malloc(sizeof(int)*4);
//intialize 2d array to 0
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
x.arr[i][j] = 0;
//print 2d array
for(i=0; i<4; i++);
for(j=0; j< 4; j++)
printf("arr[%d][%d] = %d \n", i ,j ,x.arr[i][j]);
return 0;
}
您在最后一个 i
循环中多了一个分号。这会导致您访问错误的内存地址,因为 j
循环以 i
值 4 运行,这是越界的。
将for(i=0; i<4; i++);
更改为for(i=0; i<4; i++)
,一切正常