0

munmap_chunk()でクラッシュした次のコード: 無効なポインター

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> modules = {3,5,7};
vector<int> remainders = {2,3,2};
vector<int> m_bigs(modules.size());

int main() {
    int m_big = 1;
    for(int r : remainders) { m_big *= r; };
    transform(m_bigs.begin(), m_bigs.end(), remainders.begin(), remainders.end(), [m_big](int m, int r){ cout << m_big / r << endl; return m_big / r; });
    for(int m : m_bigs) { cout << m << endl; };

    return 0;
}

出力は

6 4 6 4 6 0

しかし、予想されるのは

6 4 6 6 4 6

4

1 に答える 1

1
template < class InputIterator1, class InputIterator2,
           class OutputIterator, class BinaryOperator >
  OutputIterator transform ( InputIterator1 first1, InputIterator1 last1,
                             InputIterator2 first2, OutputIterator result,
                             BinaryOperator binary_op );

残りの要素を残りの位置に挿入しようとしています.end()...悪い考えです。

正しいコードは

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> modules = {3,5,7};
vector<int> remainders = {2,3,2};
vector<int> m_bigs(modules.size());

int main() {
    int m_big = 1;
    for(int r : remainders) { m_big *= r; };
    transform(m_bigs.begin(), m_bigs.end(), remainders.begin(), m_bigs.begin(), [m_big](int m, int r){ cout << m_big / r << endl; return m_big / r; });
    for(int m : m_bigs) { cout << m << endl; };

    return 0;
}
于 2012-07-20T09:05:26.597 に答える