c++ - 如何传递二维结构数组给函数?

标签 c++ arrays function memory struct

有一个二维结构数组,我将一个数组指针传递给一个函数:

result.capabilities = (Capabilities **)malloc(sizeof(Capabilities *)*6);
for(int i=0;i<6;i++){
    result.capabilities[i] = (Capabilities *)malloc(sizeof(Capabilities)*8);
}
init_capabilities(&result.capabilities);

函数调用导致错误:

Unhandled exception at 0x003c10f9 in solution.exe: 0xC0000005: Access violation writing location 0xfdfdfdfd.

这是我的功能:

void init_capabilities(Capabilities ***capabilities) {
    for(int i=0;i<6;i++){
        for(int j=0;j<8;j++){
            printf("%d %d\n",i,j);
            capabilities[i][j]->room_capabilities = new RoomCapability[rooms_count];
        }
    }
}

我认为数组 capabilities 的维度 - 6x8。结果是 1x6。 一个小时就因为这个头疼。向您展示如何更改参数类型或如何引用我的数组的元素,以便一切就绪?

最佳答案

您正在通过指针传递您的指针到指针到功能。这就是为什么您使用三个星号而不是两个星号的原因。

试试这个:

void init_capabilities(Capabilities ***capabilities) {
    for(int i=0;i<6;i++){
        for(int j=0;j<8;j++){
            printf("%d %d\n",i,j);
            // Note: extra dereference:
            (*capabilities)[i][j].room_capabilities = new RoomCapability[rooms_count];
        }
    }
}

或者这个:

result.capabilities = (Capabilities **)malloc(sizeof(Capabilities *)*6);
for(int i=0;i<6;i++){
    result.capabilities[i] = (Capabilities *)malloc(sizeof(Capabilities)*8);
}
init_capabilities(result.capabilities); // Note NO address-of operator

// Note: two stars, not three
void init_capabilities(Capabilities **capabilities) {
    for(int i=0;i<6;i++){
        for(int j=0;j<8;j++){
            printf("%d %d\n",i,j);
            capabilities[i][j].room_capabilities = new RoomCapability[rooms_count];
        }
    }
}

或者,由于您使用的是 C++,而不是 C:

// Assuming that result.capabilities and Capabilties::room_capabilities are declared
// vectors of the appropriate types ...
result.capabilities = std::vector<std::vector<Capabilities> >(std::vector<Capabilities>(8),6);
init_capabilities(result.capabilities);

void init_capabilities(std::vector<std::vector<Capabilities>& capabilities) {
    for(int i=0;i<capabilities.size();i++){
        for(int j=0;j<capabilties[i].size();j++){
            printf("%d %d\n",i,j);
            capabilities[i][j].room_capabilities.resize(rooms_count);
        }
    }
}

关于c++ - 如何传递二维结构数组给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7921286/

相关文章:

c++ - 检查库是否存在

c++ - 从函数内部推断函数返回类型

c++ - 为什么 0 == ("abcde"+1) 不是常量表达式?

c++ - 在 pcm 上降低音量后出现奇怪的噪音

arrays - Kotlin 数组初始化中 init 调用的顺序

c# - string[].Foreach() 中的 T[] 参数

c - 如何在 C 中的数组的任何部分设置 "empty"元素

php - 调用 PHP 函数时如何防止显示错误

r - 在 R 中的 split() 之后保持数据的原始顺序

javascript - 在 jQuery 中合并 3 个函数