以下のプログラムを動かした際に、"double free or corruption (out)"と表示されてしまいます。修正方法のご教授をお願いします。
ダブルフリー(メモリの2重解放)が原因とのことですが、どのタイミングで解放されているのかという所から理解できていません。
###### 問題の切り分けのために、試したことは以下2点です。
- 入力時に再現するデータ
・vector<int> B={5,3,2,1};//こちらだとエラーになる
・vector<int> B={4,1,3,2,5};//こちらだとエラーにならない
2. エラーの発生箇所の確認
・solotionメソッドの、return 0;の直前まで動作することを確認しています
###### エラーの内容
double free or corruption (out)
[1] 3070 abort (core dumped) ./a.out
再現環境
vscode上、codilityのサイト上の2か所共におきます。
C++コード
こちらの問題を解いていました。
PermCheck https://app.codility.com/programmers/lessons/4-counting_elements/perm_check/
C++
1#include <bits/stdc++.h> 2#define rep(i, n) for (int i = 0; i < (n); ++i) 3#define rep1(i, n) for (int i = 1; i <= (n); ++i) 4using namespace std; 5using ll = long long; 6using P = pair<int, int>; 7 8int max(std::vector<int> v) 9{ 10 int maxVal = INT_MIN; // 整数最小値 11 for(int i = 0; i < (int)v.size(); ++i) { 12 if( v[i] > maxVal ) 13 maxVal = v[i]; 14 } 15 return maxVal; 16} 17 18int solution(vector<int> &A){ 19 vector<int> track(max(A),0); 20 int Asize=A.size(); 21 22 for (int i=0;i<track.size();i++){ 23 track[A[i]-1]=1; 24 } 25 26 //Aと同じ要素数 27 int cnt=0; 28 while((track[cnt]==1) and (cnt < Asize)){ 29 cnt++; 30 } 31 32 if(cnt==Asize){ 33 return 1; 34 }else{ 35 return 0; //※この箇所まで、プログラムが動作することを確認しています。 36 } 37} 38 39int main(){ 40 vector<int> B={5,3,2,1};//こちらだとエラーになる 41 //vector<int> B={4,1,3,2,5};//こちらだとエラーにならない 42 cout << max(B) << endl; 43 cout << solution(B) << endl; 44 return 0; 45} 46
回答2件
あなたの回答
tips
プレビュー