怎么解释这个?一个"新"-ed数组没有初始化......?

Dav*_* Xu 0 c++ arrays memory-management

我遇到了一些奇怪的事情:一个数组"new"-ed in heap with random values ...

我用以下代码进行了测试:

class Solution_046 {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> rst;
        int sz = nums.size();
        if(sz)
        {
            vector<int> group;
            int* inuse = new int[sz];
            cout<<"--------- inuse ------------"<<endl;
            for(int ii=0; ii<sz; ++ii)
                //inuse[ii]=0, cout<<inuse[ii]<<", ";
                cout<<inuse[ii]<<",, ";
            cout<<endl;

            //......
        }
        return rst;
    }
};


int main()
{
    Solution_046 s046;
    vector<int> vv;
    vv.push_back(1);
    vv.push_back(2);
    vv.push_back(3);
    vv.push_back(4);
    vv.push_back(5);
    vv.push_back(6);
    vv.push_back(7);
    vector< vector<int> > rst = s046.permute(vv);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我禁用那些"vv.push_back(...)"中的一行或两行,则打印的结果将包含一些随机值而不是全部为零:

$ ./nc (with all 7 lines)
--------- inuse ------------
0,, 0,, 0,, 0,, 0,, 0,, 0,, 

$ ./nc (disalbed one line)
--------- inuse ------------
29339680,, 0,, 4,, 5,, 0,, 0,, 

$ ./nc (disabled two lines)
--------- inuse ------------
26095648,, 0,, 5,, 6,, 0,, 

$ ./nc (disabled three lines)
--------- inuse ------------
0,, 0,, 0,, 0,, 

$ ./nc (disabled four lines)
--------- inuse ------------
0,, 0,, 0,, 0,, 

$ ./nc (disabled five lines)
--------- inuse ------------
0,, 0,,

$ ./nc (disabled six lines)
--------- inuse ------------
0,,
Run Code Online (Sandbox Code Playgroud)

禁用一行或两行时发生了什么,为什么"new"-ed数组中有非零值?

Tar*_*ama 7

int* inuse = new int[sz];
Run Code Online (Sandbox Code Playgroud)

此调用将为int数组分配内存,但不会对内容进行值初始化.如果要使用零初始化,请使用以下语法:

int* inuse = new int[sz]();
int* inuse = new int[sz]{}; //c++11
Run Code Online (Sandbox Code Playgroud)