2013-02-16 84 views
0

我试图访问我创建的结构的返回2d数组。我可以通过它们创建的func来访问它们,但是当我将它传递出去时似乎失去了参考。 我已经厌倦了一千种方法来做到这一点,但它似乎没有什么区别。 一直伴有seg故障。在声明函数之外的二维数组中访问struct

我目前运行在它看起来像:

一个简单的结构:

typedef struct{ 
    int weight; 
} myStruct_t; 

,致力于为myStruct_t的2-d阵列的功能。 我目前的尝试是让一个新变量充当指向“map”的指针,如最后2行所示。

myStruct_t*** makeGrid(int sizeX, int sizeY) 
{ 
    int i; 

    myStruct_t **map = malloc(sizeX * sizeof(*map)); 

    if(map == NULL){ 
     printf("Unable to set memory, Exiting\n"); 
     exit(1); 
    }else{ 
     for (i = 0; i < sizeX; i++) 
     { 
      map[i] = malloc(sizeY*sizeof(myStruct_t)); 

      if(map[i] == NULL) 
      { 
       printf("Unable to set memory, Exiting\n"); 
       exit(1); 
      }else{ 
       printf("success!\n"); 
      } 
     } 
    } 

    myStruct_t ***mapPtr = &map; 
    return mapPtr; 
} 

然后在另一文件中:

void initSys(){ 
    myStruct_t** map = *myStruct_t(100,100);  
    map[0][0].weight = 7; 

    //or i also just tried 
    //myStruct_t*** map = myStruct_t(100,100); 
    //(*map)[0][0].weight = 7; 

} 

输出是一个段错误。其惊人的速度,我完全忘记了C内存管理,我似乎无法取回它!

任何建议将是惊人的。

回答

2

bug是上线

myStruct_t ***mapPtr = &map; 

它应该是:

return map; 

而且你需要将自己的返回类型更改为双指针。

当您返回“&地图”时,您将返回变量map的地址。由于变量map存储在堆栈中,因此您将地址返回到无效内存。

+0

我返回地图并将myStruct_t ** map = * myStruct_t(100,100)更改为myStruct_t ** map = myStruct_t(100,100);.仍然SefFaults – TrewTzu 2013-02-16 07:26:52

+0

对不起,你是正确的,我的新问题是从别的地方。 – TrewTzu 2013-02-16 08:04:08