【问题标题】:How to get input and display 2 dimensional array in c++?如何在 C++ 中获取输入并显示二维数组?
【发布时间】:2021-12-12 21:06:21
【问题描述】:

代码:-

    #include <iostream> 
    using namespace std;
    
    int main() {
        int r,c,*p;
        cout<<"Rows : ";
        cin>>r;
        cout<<"Columns : ";
        cin>>c;
        
        p=new int[r*c];
        
        cout<<"\nEnter array elements :"<<endl;
        int i,j,k;
        for( i=0;i<r;i++){
          for( j=0;j<c;j++){
            cin>>k;
            *(p+i*c+j)=k;
          }
        }
        
        cout<<"\nThe array elements are:"<<endl;
        for( i=0;i<r;i++){
          for( j=0;j<c;j++){
            cout<<*p<<" ";
            p=p+1;
          }
          cout<<endl;
        }
        cout<<endl;
        
        delete[]p;
        return 0; 
}

输出:-

Output

错误:-

munmap_chunk(): 无效指针进程以退出代码-6结束。

谁能解释为什么会出现上述错误?

【问题讨论】:

标签: c++ pointers


【解决方案1】:

问题发生在程序结束时,当您delete[] p 时。在紧接它之前的嵌套 for 循环中,您正在修改 p,因此,当您尝试在末尾修改 delete[] p 时,您会得到未定义的行为。

潜在的修复方法包括,在打印数组元素时,以与第一个 for 循环中相同的方式访问指针(或如 Jarod 所述,使用 [i * c + j]

或者,您可以使用附加变量。

int *tmp = p;
for( i = 0 ; i < r; i++ ){
   for( j = 0; j < c; j++ ){
       cout << *tmp << " ";
       tmp = tmp + 1; // ++tmp; also works
   }
   cout << endl;
}
cout << endl;
        
delete[] p;

这样,p 仍然指向原来的地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2016-09-04
    • 2018-09-04
    • 2020-08-01
    • 2015-12-13
    相关资源
    最近更新 更多