Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在声明函数外访问二维数组中的结构_C_Memory Management_Malloc - Fatal编程技术网

C 在声明函数外访问二维数组中的结构

C 在声明函数外访问二维数组中的结构,c,memory-management,malloc,C,Memory Management,Malloc,我正在尝试访问我创建的结构的返回2d数组。我可以在创建它们的func中访问它们,但在传递时似乎丢失了引用。 我已经用了上千种方法来做这件事,但似乎没有什么不同。 始终与seg故障保持一致 我目前对它的运行情况如下: 一个简单的结构: typedef struct{ int weight; } myStruct_t; 为myStruct创建二维数组的函数。 我当前的尝试是创建一个新变量作为指向“map”的指针,如前两行所示 myStruct_t*** makeGrid(int sizeX

我正在尝试访问我创建的结构的返回2d数组。我可以在创建它们的func中访问它们,但在传递时似乎丢失了引用。 我已经用了上千种方法来做这件事,但似乎没有什么不同。 始终与seg故障保持一致

我目前对它的运行情况如下:

一个简单的结构:

typedef struct{
    int weight;
} myStruct_t;
为myStruct创建二维数组的函数。 我当前的尝试是创建一个新变量作为指向“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;  
}  
输出为SegFault。 令人惊讶的是,我很快就完全放弃了C内存管理,而我似乎无法找回它


任何建议都将是惊人的。

该漏洞即将出现

myStruct_t ***mapPtr = &map;
应该是:

 return map;
您需要将返回类型更改为双指针


当您返回“&map”时,您将返回变量
map
的地址。当变量
map
存储在堆栈上时,您将向无效内存返回一个地址

我返回map并将myStruct\u t**map=myStruct\u t(100100)更改为myStruct\u t*map=myStruct\u t(100100);。仍然是SefFaults
 return map;