未正确读取 2D 数组元素
2D array elements not being read properly
输出是整行/整列的数字字符串,而不是单个数字。有人可以帮我吗?
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int t;
cin>>t;
while(t--){
int n,m,cnt=0;
cin>>n>>m;
for(int i=0;i<=n+1;i++){
for(int j=0;j<=m+1;j++){
if(i==0||i==n+1||j==m+1||j==0) G[i][j]=0;
cin>>G[i][j];
}
}
cout<<G[1][2]<<endl;//this gives wrong o/p
返回 0;}
很可能由于i <= n + 1
和for
循环中的j <= m + 1
条件而超出范围读取,从而调用未定义的行为,从而导致堆栈损坏,从而解释您所看到的输出。将边界修改为: i < n
和j < m
.数组在 C++ 中索引为零。第一个数组元素通过 somearray[0]
访问,最后一个元素somearray[n-1]
不是somearray[n]
这是您尝试在代码中访问的内容。多维数组也是如此。声明:
cout << G[i][j] << endl;
错误地放置在for
环之外。它应该在内部for
回路内。数组应定义为while
循环中的第二条语句:
int G[n][m]; // Avoid VLAs
话虽如此,可变长度数组不是C++标准的一部分,您应该更喜欢std::vector
和std::array
而不是原始数组。
假设G
是一个大小为 n x m
的 2D 数组,那么你在这里越界了:
for(int i=0;i<=n+1;i++) {
for(int j=0;j<=m+1;j++)
因为数组索引从 0 开始,以大小 - 1 结束。
因此,代码会调用未定义的行为。为避免这种情况,只需将双精度 for 循环更改为:
for(int i = 0; i < n; i++) {
for(int j = 0;j < m; j++)
相关文章:
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 交换函数不是在 C++ 中交换 2D 数组的元素
- 如何将所有元素初始化为 -1 的 2D 数组?
- 如何使用指针C++将元素从2D数组复制到1D数组
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 如何计算大小为 1000 x 1000 的 2D 数组中 2 个元素之间的步幅?C++
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- Getter 函数,用于在 2d 数组是类的数据成员时检索 2d 数组元素
- 创建 2D 数组类:如何访问 2D 数组类(如 array[x][y))中的元素
- 如何使用 cpp 消除 2d 数组中的边框元素
- 排列 2D 数组中的元素
- 静态2D数组,添加元素
- 从2D数组C 中删除单个元素
- 如何将元素的索引从2D数组存储到1D数组中,然后交换这些值
- 为什么代码无法打印此 2D 数组的元素?
- 未正确读取 2D 数组元素
- 我的代码正在制作 2D 数组元素的重复副本.代码中有什么问题?
- C++:在重载 ostream >> 时引用 2D 数组元素时崩溃
- 连接一个char 2D数组元素和c++中的int
- C++:以对角线方式处理2d数组元素