在struct中动态分配**指针

时间:2015-02-12 23:14:21

标签: c arrays multidimensional-array malloc

我正在尝试学习如何在结构中分配2d数组,但它不断得到段错误。我知道如何在结构外部分配一个2d数组,但我不知道为什么当我将它移动到结构体中时会出现段错误。

/*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;
}

2 个答案:

答案 0 :(得分:2)

您的上一个i循环中有一个额外的分号。这会导致您访问错误的内存地址,因为j循环运行时i值为4,超出范围。

答案 1 :(得分:1)

for(i=0; i<4; i++);更改为for(i=0; i<4; i++),一切正常