因此,问题在于该代码在运行时给出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)
答案 0 :(得分:1)
此行:if (i^x < n)
可能没有按照您的意愿做,因为^
的优先级低于<
。
您可以通过编写if ((i^x) < n)