繁体   English   中英

在声明函数之外访问2d数组中的struct

[英]Accessing struct in 2d array outside of declaring function

我正在尝试访问我创建的返回的2d结构数组。 我可以在他们创建的函数中访问它们但似乎丢失了引用,因为我将它传递出去。 我已经厌倦了一千种方法,但它似乎没有什么区别。 始终存在seg故障。

我当前的运行看起来像:

一个简单的结构:

typedef struct{
    int weight;
} myStruct_t;

为myStruct_t创建二维数组的函数。 我目前试图解决的问题是将一个新变量作为指向“map”的指针,如最后两行所示。

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;

}

输出是SegFault。 令人惊讶的是我有多快忘记了C内存管理,我似乎无法收回它!

任何建议都会很棒。

这个bug就行了

myStruct_t ***mapPtr = &map;

它应该是:

 return map;

并且您需要将返回类型更改为双指针。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM