如何将二维结构数组传递给函数
How to pass two-dimensional array of structures to function?
有一个二维数组结构,我正在传递一个数组指针给一个函数:
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);
函数调用导致错误:
在solution.exe中0x003c10f9的未处理异常:0xC0000005:访问违反写入位置0xfdfdfdfd.
下面是我的函数:
void init_capabilities(Capabilities ***capabilities) {
for(int i=0;i<6;i++){
for(int j=0;j<8;j++){
printf("%d %dn",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 %dn",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 %dn",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 %dn",i,j);
capabilities[i][j].room_capabilities.resize(rooms_count);
}
}
}
声明
void init_capabilities(Capabilities ***capabilities)
void init_capabilities(Capabilities **capabilities)
和call by
init_capabilities(result.capabilities);
你只需要传递指针到你的数组结构体,而不是指向数组结构体指针的指针。
Edit:正如其他人指出的,如果你要使用c++,你应该真正使用new
,如:
result.capabilities = new (Capabilities *)[6];
for(int i=0;i<6;i++) {
result.capabilities[i] = new Capabilities[8];
}
init_capabilities(result.capabilities);
…
void init_capabilities(Capabilities **capabilities) {
for(int i=0;i<6;i++) {
for(int j=0;j<8;j++) {
capabilities[i][j].room_capabilities = new RoomCapability[rooms_count];
}
}
}
不要忘记使用delete[]
。更好的做法是,按照Rob的建议,使用预定义的c++容器来处理这类事情。但是如果你真的想使用不安全指针,我上面的代码应该可以帮你完成。
你这里有一大堆问题:
- 您为每个单独的Capability分配空间,然后创建一个新建一个,将分配的空间变为垃圾
- 你治疗功能作为一个二维数组,当它实际上是一个指针数组数组
- 你传递了整个数组的地址,但是没有在函数 中不需要遵守它
在你弄清楚你想做什么之前,如何去做就得等一等了。
相关文章:
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 如何使用函数的输出初始化 const 数组结构字段?
- 传递数组结构、ofstream 和 interger 以运行
- 从文本文件中读取并输入到数组结构中,然后显示读取的数据C++
- 将文本文件读取到数组结构中
- C/C++中数组结构和数组结构的通用接口
- C++ MDC final-在字符类型的数组结构中按字母顺序对记录中的名称进行排序
- C++ 使用数组结构创建平衡的二叉搜索树
- C++:释放动态数组(结构成员)和指向此结构的指针的方法
- 使用 vector 在 c++ 中声明 3D 数组结构
- 数组结构无法正确打印
- 如何在C++中访问数组结构内部的数组结构
- CIN进入数组结构似乎什么也没输入
- ifstream将数组结构到txt文件中,然后尽可能将其提取为数组
- wlanapi-将WlanFreeMemory释放其WLAN_INTERFACE_INFO数组结构
- 显示数组结构 c++
- C++ 使用函数访问数组结构的方法是什么?
- 将庞大的数组结构复制到 GPU
- 如何封送包含字符矩阵的数组结构
- C++多维数组结构的对齐