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数组中有非零值?
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)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |