如何解决注释掉cout语句后,c ++程序因malloc崩溃
我有这个运行良好的程序。但是,如果我注释掉cout语句(请参见下面的代码),则会引发错误。它也对ideone进行了尝试,结果相同。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> ugly_numbers = vector<int>(n,0);
ugly_numbers[0] = 1;
int ugly2 = 0,ugly3 = 0,ugly5 = 0,ugly_count = 1;
while (ugly_count <= n) {
int next_ugly_num_2 = ugly_numbers[ugly2] * 2;
int next_ugly_num_3 = ugly_numbers[ugly3] * 3;
int next_ugly_num_5 = ugly_numbers[ugly5] * 5;
int next_ugly_num = min(min(next_ugly_num_2,next_ugly_num_3),next_ugly_num_5);
if (next_ugly_num == next_ugly_num_2) ugly2++;
if (next_ugly_num == next_ugly_num_3) ugly3++;
if (next_ugly_num == next_ugly_num_5) ugly5++;
//cout << ugly_count << " - "; //*********THIS COUT IS WIERD**********
ugly_numbers[ugly_count] = next_ugly_num;
ugly_count++;
}
cout << ugly_numbers[n - 1] << endl;
return 0;
}
错误:
a.out: malloc.c:2401: 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.
The terminal process "/bin/bash '-c',' g++ -g Cpp/a.cpp -o a.out && clear && timeout 10 /usr/bin/time -v --output sys.txt ./a.out < input.txt > output.txt && rm *out'" terminated with exit code: 134.
为什么会这样?为什么此cout
语句会影响程序的行为?以及我该如何纠正?
解决方法
当您使用等于ugly_numbers[ugly_count]
的{{1}}修改ugly_count
时,在上一个循环迭代中您有未定义的行为。这种不确定的行为可能会或可能不会可见:它取决于n
的值,n
的实现方式以及许多其他不可能的因素。这可以解释为什么您只在没有输出语句的情况下得到错误。
您应该将循环从vector
排除到0
,或者将向量增大一个元素:
n
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。