我遇到了一些奇怪的事情:一个数组"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) …Run Code Online (Sandbox Code Playgroud) 我在下面运行代码并得到一些奇怪的输出:
#include <iostream>
using namespace std;
int main()
{
for(int ll=1444; ll<1450; ++ll)
{
cout<<ll<<endl;
cout<<"###### 0 #######"<<endl;
int mtx[ll][ll];
cout<<"###### 1 #######"<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
1444
###### 0 #######
###### 1 #######
1445
###### 0 #######
###### 1 #######
1446
###### 0 #######
###### 1 #######
1447
###### 0 #######
###### 1 #######
1448
###### 0 #######
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
我尝试用ll的值逐个检查,当ll达到1448时,确实发生了分段错误.
然后我将数组从int更改为bool,问题消失了.
基于ll值的计算:
ll=1447, total space of array is 1447*1447*4 = 8375236 bytes = 8178.95 Kbytes
ll=1448, total …Run Code Online (Sandbox Code Playgroud)