为什么在这段代码中会出现运行时错误SIGSEGV 今天我正在解决CoDeCf问题,这里我得到了运行错误,SIGSEV如下代码,请帮助我。下面是C++代码< /P> while(t!=0){ int n,m; cin>>n>>m; int f[n],p[n]; 对于(int i=0;i>f[i]; 对于(int i=0;i>p[i]; 整数频率[m+1]; 布尔效用[m+1]; memset(avail、false、sizeof(avail)); memset(freq,-1,sizeof(freq)); 对于(int i=0;i

为什么在这段代码中会出现运行时错误SIGSEGV 今天我正在解决CoDeCf问题,这里我得到了运行错误,SIGSEV如下代码,请帮助我。下面是C++代码< /P> while(t!=0){ int n,m; cin>>n>>m; int f[n],p[n]; 对于(int i=0;i>f[i]; 对于(int i=0;i>p[i]; 整数频率[m+1]; 布尔效用[m+1]; memset(avail、false、sizeof(avail)); memset(freq,-1,sizeof(freq)); 对于(int i=0;i,c++,segmentation-fault,c++14,C++,Segmentation Fault,C++14,数组的长度不能是变量。 您可以使用vector或new vector<int> f(n); //or int *f = new int[n]; //remember to delete after new freq[i]是类型i的总价。因此,freq[i]应该用0而不是-1初始化 您可以使用freq[i]==0来确定是否存在这样的存储篮。这样可以节省avail占用的内存 数组的长度不能是变量。 您可以使用vector或new vector<int> f(n); //or

数组的长度不能是变量。 您可以使用
vector
new

vector<int> f(n);
//or
int *f = new int[n];
//remember to delete after new
freq[i]是类型i的总价。因此,freq[i]应该用0而不是-1初始化

您可以使用
freq[i]==0
来确定是否存在这样的存储篮。这样可以节省
avail
占用的内存

数组的长度不能是变量。 您可以使用
vector
new

vector<int> f(n);
//or
int *f = new int[n];
//remember to delete after new
freq[i]是类型i的总价。因此,freq[i]应该用0而不是-1初始化


您可以使用
freq[i]==0
来确定是否存在这样的内存篮。这样可以节省
avail
占用的内存。 首先,对于“i”的所有值,f[i]不能为0。因此,freq[0]将有一些垃圾值,您正在将其与“min”进行比较。您可以尝试减去1,然后将其用作freq数组中的索引

freq[f[i]-1]+=p[i];` avail[f[i]-1] = true;`
同时更改freq的大小并使用“m”而不是“m+1”。 其次,使用0而不是-1初始化freq数组,因为您正在向其索引添加值,所以-1作为初始值将更改最终结果

memset(freq,0,sizeof(freq));

我在做了这些更改后提交了一份,它被接受了。您也可以尝试。

我可以在您的代码中找到两个问题。 首先,对于“i”的所有值,f[i]不能为0。因此,freq[0]将有一些垃圾值,您正在将其与“min”进行比较。您可以尝试减去1,然后将其用作freq数组中的索引

freq[f[i]-1]+=p[i];` avail[f[i]-1] = true;`
同时更改freq的大小并使用“m”而不是“m+1”。 其次,使用0而不是-1初始化freq数组,因为您正在向其索引添加值,所以-1作为初始值将更改最终结果

memset(freq,0,sizeof(freq));

我在做了这些更改后提交了一份报告,它被接受了。你也可以试试。

为什么要创建一个大小由用户输入决定的数组?至少先检查它的值!你还可以通过从输入中获得的值访问数组。你应该检查f[I]的值你为什么要创建一个数组,它的大小取决于用户的输入?至少要检查它的值,你也可以从输入中得到的值来访问数组。你也应该检查f[i]的值。请考虑建议<代码> STD::MaMuxUngy()/<代码>而不是<代码>新< /代码>。请考虑建议<代码> STD::而不是
新建