有一个二维结构数组,我将一个数组指针传递给一个函数:
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/