在声明函数之外的二维数组中访问struct
问题描述:
我试图访问我创建的结构的返回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 = ↦
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内存管理,我似乎无法取回它!
任何建议将是惊人的。
答
bug是上线
myStruct_t ***mapPtr = ↦
它应该是:
return map;
而且你需要将自己的返回类型更改为双指针。
当您返回“&地图”时,您将返回变量map
的地址。由于变量map
存储在堆栈中,因此您将地址返回到无效内存。
我返回地图并将myStruct_t ** map = * myStruct_t(100,100)更改为myStruct_t ** map = myStruct_t(100,100);.仍然SefFaults – TrewTzu 2013-02-16 07:26:52
对不起,你是正确的,我的新问题是从别的地方。 – TrewTzu 2013-02-16 08:04:08