Как исправить этот код C ++ с ошибкой во время выполнения malloc: sysmalloc: Утверждение - PullRequest
0 голосов
/ 04 июня 2019

Так что проблема в том, что этот код выдает ошибку malloc при запуске. Вводимые данные: n = 2, x = 4.

Я думаю, что проблема с вектором pre, потому что это происходит, когда вызывается push_back.

int n, x;
cin>>n>>x;
n = (1<<n);
vector<int> taken(n, 0);
vector<int> pre;
for(int i = 1; i < n; i++) {
    if(!taken[i]) {
        taken[i] = 1;
        if(i^x < n)
            taken[(i^x)] = 1;
        pre.push_back(i);
    }
}

Я получаю сообщение об ошибке:

a.out: malloc.c:2394: sysmalloc: Assertion `(old_top == initial_top (av) && 
old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse 
(old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)

1 Ответ

1 голос
/ 04 июня 2019

Эта строка: if (i^x < n), вероятно, не выполняет то, что вам нужно, поскольку ^ имеет более низкий приоритет, чем <.

Это можно исправить, написав if ((i^x) < n)

...