C++ 可变大小多维数组

C++ 可变大小多维数组,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,我的可变大小多维数组代码有什么问题。如何解决这个问题。 我的代码并没有通过所有测试用例。有人能帮我修复它吗?这是来自hackerrank challenge的问题 #include<bits/stdc++.h> using namespace std; int main() { int n,q; cin>>n; cin>>q; int *arr[n]; for(int i=0;i<n;i++) {

我的可变大小多维数组代码有什么问题。如何解决这个问题。 我的代码并没有通过所有测试用例。有人能帮我修复它吗?这是来自hackerrank challenge的问题

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,q;
    cin>>n;
    cin>>q;
    int *arr[n];  
    for(int i=0;i<n;i++)
    {
       int x;
       cin>>x;
       int b[x];
       for(int j=0;j<x;j++)
       {
           cin>>b[j];
       } 
       arr[i]=b;
    }
    while(q--)
    {
        int i,e;
        cin>>i>>e;
        cout<<arr[i][e]<<endl;
    }
    return 0;
}

#包括
使用名称空间std;
int main()
{
int n,q;
cin>>n;
cin>>q;
int*arr[n];
对于(int i=0;i>x;
int b[x];
对于(int j=0;j>b[j];
} 
arr[i]=b;
}
而(q--)
{
int i,e;
cin>>i>>e;
cout这是正确的代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,q;
    cin>>n;
    cin>>q;
    int *arr[n];   // passed all test cases
    for(int i=0;i<n;i++)
    {
       int x;
       cin>>x;
       int *b=new int[x];
       for(int j=0;j<x;j++)
       {
           cin>>b[j];
       } 
       arr[i]=b;
    }
    while(q--)
    {
        int i,e;
        cin>>i>>e;
        cout<<arr[i][e]<<endl;
    }
    return 0;
}

#包括
使用名称空间std;
int main()
{
int n,q;
cin>>n;
cin>>q;
int*arr[n];//通过了所有测试用例
对于(int i=0;i>x;
int*b=新的int[x];
对于(int j=0;j>b[j];
} 
arr[i]=b;
}
而(q--)
{
int i,e;
cin>>i>>e;

Ctoto开始时,C++没有。“这是我的代码的问题”,这完全取决于它应该做什么。如果你谈论标准C++ VLAS,并且是错误的。你将指针存储到生命周期结束时访问的对象,所以访问有未定义的行为。使用<代码> STD::向量< /代码>。继续:<代码> ARR[i]=b;
makes
arr[i]
指向局部数组
b
,这是一个数组,在循环的每次迭代中都会超出作用域并结束其生命周期。如果在循环后尝试取消引用该指针,甚至在循环迭代后在循环内部,都会导致未定义的行为。此外,您还存储了指向超出作用域的局部变量的指针,他说re
arr[i]=b;
您不仅仍然使用非标准和非便携功能,而且现在还存在一些内存泄漏。