如何使用运行时错误malloc修复此C ++代码:sysmalloc:断言

时间:2019-06-03 23:05:33

标签: c++11 vector stl push-back

因此,问题在于该代码在运行时给出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 个答案:

答案 0 :(得分:1)

此行:if (i^x < n)可能没有按照您的意愿做,因为^的优先级低于<

您可以通过编写if ((i^x) < n)

来解决此问题