将矢量的整数内容打印为字符串会导致分割错误
Printing Integer Contents of a Vector as a String are Leading to Segmentation Fault
我正在尝试通过使用连续的"*"字符来打印我的正态分布来反映正态分布的条形。程序通常在打印之前崩溃,但有时会在打印后崩溃。知道发生了什么吗?
int main() {
std::normal_distribution<double> normDist(10.0, 4.0);
vector<int> v(20); // All zeros.
for (int i{}; i < 500; i++) {
int num = normDist(eng3);
if (num >= 0 && num < 20);
v[num]++;
}
for (int i{}; i < 20; i++) {
cout << i << ": " << std::string(v[i], '*') << endl;
}
}
结果:
0: *****
1: ***
2: *******
3: *******
4: ***********************
5: *********************
6: **********************************
7: **********************************
8: ********************************************
9: ********************************************
10: ****************************************************
11: **********************************************
12: *****************************************
13: **************************************************
14: ************************************
15: *******************
16: ************
17: ********
18: *******
19: **
double free or corruption (out)
Aborted (core dumped)
这里有一个额外的分号:
if (num >= 0 && num < 20); // <- extra semicolon results in empty body
v[num]++;
正如@PaulMcKenzie所发现的那样。此代码具有与此代码相同的效果:
if (num >= 0 && num < 20)
{
// nothing here
}
v[num]++;
因此,发生的情况是,您使用num
作为索引来索引向量,而不检查值是否在范围内。
因此,由于num
获取的值是随机的,有时您最终可能会超出(向量(访问内存,从而导致分段错误,例如调用未定义行为(UB(。
这可能解释了为什么你的代码有时会崩溃,而另一些时候则不会。
相关文章:
- C++函数的字符串错误"find_first_of"
- 流字符串错误输出
- 在图像上覆盖文本的程序会产生无休止的字符串错误
- 字符串错误的向量
- C++字数统计程序使用C字符串错误在程序运行后
- 从函数返回字符串C++错误
- 字符串错误或编译器错误
- SQL 字符串错误?没有这样的列
- C/C++ 字符串错误与 ARM SEG 故障总线错误
- 字符串错误输出
- C++调用堆上的类(空字符串错误)
- 运行时字符串错误C++
- 字符串递归函数中的字符串错误
- 从文本文件/文本流中读取Q字符串错误
- 动态内存c++程序中的字符串错误
- 发现c++正则表达式子字符串错误模式
- 在Cocos2d-x中比较字符串错误
- c++读TXT到字符串错误
- 字符串错误检查
- Chromium嵌入式框架VS2013字符串错误