二维std::数组问题
2-Dimensional std::array woes
我原以为我喜欢C++11中std::array的想法,但它看起来有一些夸克。我发现这一点是因为以下代码给出了一个分段错误:
#include<array>
#include<iostream>
int main() {
std::array<std::array<int*, 5>, 4> sum;
//Initialize sum array
std::cout << sum.size() << " " << sum[0].size() << "n";
for (size_t i = 0; i < sum.size(); i++) {
for (size_t j = 0; j < sum[0].size(); j++) {
if (i == 0 || j == 0)
*(sum[i][j]) = 0;
else
sum[i][j] = nullptr;
}
}
return 0;
}
该输出:
4 5
Segmentation fault (core dumped)
sum.size()
按预期返回4,sum[0].size()
按预期返回5
;IE看起来我们有一个4行5列的数组。然而,当我尝试执行这个程序时,我会遇到分段错误(如上所示(。这个链接表明,颠倒我访问数组的顺序(如将sum[i][j]
更改为sum[j][i]
(应该可行,但我也会出现seg错误。这让我觉得我的指针可能出了问题(我对C++有点生疏(,所以我把sum改为整数数组,所以它读起来如下:
#include<array>
#include<iostream>
int main() {
std::array<std::array<int, 5>, 4> sum;
//Initialize sum array
std::cout << sum.size() << " " << sum[0].size() << "n";
for (size_t i = 0; i < sum.size(); i++) {
for (size_t j = 0; j < sum[0].size(); j++) {
if (i == 0 || j == 0)
sum[i][j] = 0; //works as sum[j][i] too!!!
else
sum[i][j] = 1;
std::cout << sum[i][j];
}
std::cout << "n";
}
std::cout << "heren";
return 0;
}
工作和输出:
4 5
00000
01111
01111
01111
here
然而,我很困惑,因为如果我把sum[i][j]
的切换到sum[j][i]
的,它也能工作并输出相同的东西!当我在第一次运行内部循环的最后一次迭代中尝试sum[5][0]
时,我预计会出现seg错误!我现在愿意称自己为地狱般的困惑。发生了什么事?
额外信息:我使用的是g++4.8.4,并设置了-std=c++11标志。
第一个片段不起作用,因为您正在访问随机内存位置。您声明了(本质上(一个(未初始化的(指针的二维数组,并且在代码中取消了对它们的引用,这是未定义的行为,很可能会导致segfault(您试图在随机内存位置上写入,这些位置很可能未映射到当前虚拟地址空间中(。
第二个片段很好;反转这两个索引是错误的,但您不会得到任何错误,因为std::array
(或编译器对底层C数组(没有执行显式绑定检查。当你得到无效索引(第一个索引上的4(时,从技术上讲,它仍然是未定义的行为;在实践中,您可能会覆盖堆栈上不相关的变量,程序会偶然继续运行。
// This is undefined behavior too
int* array[4][5];
*(array[0][0]) = 0;
// This is also undefined behavior, and for the same reason
int *cell;
*cell = 0;
如果你想使用指针指向的对象,你必须让它指向一个实际的对象;例如通过将有效对象的地址分配给它或创建全新对象(例如具有new
(并将其分配给指针。
不知道自己的最终目标,使用指针看起来是一个非常奇怪的设计选择;切换到CCD_ 11的阵列可能是正确的。
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输入std::数组时出现问题
- 类对象数组的问题会导致崩溃
- 传递二维数组时出现问题
- 从 C++ 中的函数返回数组地址问题
- 使用数组时出现问题
- 打印问题.我在数组中打印值时遇到一些问题
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 将字节数组转换为带有字节序问题的指针
- C++ 填充数组时遇到问题
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 编写 cin.get() 以接收字符数组时出现问题
- 在 C++ Consol 中的数组中执行用户命令时出现问题
- 存储另一个函数返回的布尔数组时遇到问题
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 运行时C++数组初始化问题
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组