此代码中的分段错误在哪里
Where is the Segmentation Fault in this code?
你好,我是一名业余程序员,更糟糕的是,我已经有一段时间没有做过任何编程了,所以我决定用一些简单的 Topcoder 问题来刷新我的记忆。我做的第一个最终是一个段故障,现在这超出了我自己能弄清楚的范围,谁能帮助我了解段故障的来源。这是代码。
vector<int> Bonuses (vector<int> points)
{
int totalPoints = 0;
for (int i = 0; i != points.size(); ++i)
{
totalPoints += points[i];
}
vector<int> percentage;
int percentageLeft = 100;
int truncatedPercentage;
for (int i = 0; i != points.size(); ++i)
{
truncatedPercentage = points[i]/totalPoints;
percentage.push_back(truncatedPercentage);
percentageLeft -= truncatedPercentage;
}
for (int i = 1;i <= percentageLeft; ++i)
{
percentage[percentage.size() - i] += 1;
}
return percentage;
}
您的程序中存在逻辑错误。 更改此设置:
truncatedPercentage = points[i]/totalPoints;
对此:
truncatedPercentage = points[i] * 100 / totalPoints;
否则,百分比几乎总是为 0,percentageLeft
为 100。 这就是为什么percentage[percentage.size() - i] += 1
像安德斯克在我面前发现的那样偏格错误。 该指数通常为负数。
也就是说,我不确定混合回推和直接赋值是否会为您提供这里最易读的代码。
可能在这里
for (int i = 1;i <= percentageLeft; ++i)
{
percentage[percentage.size() - i] += 1;
}
如果percentageLeft
大于矢量的大小。如果i
超过向量的大小,则在其内存位置之前读取,从而导致访问冲突(段错误)。
percentage[percentage.size() - i] += 1;
std::map
会比std::vector
"百分比"更符合您的目的。
相关文章:
- C++泛型类错误,问题出在哪里?
- 我的重复检查代码中的错误究竟在哪里?
- 这个 absl::StrCat 错误在哪里发生,在 Abseil 或 MSVC 中?
- 错误在哪里,为什么这个程序是错误的?
- 致命错误idk在哪里?
- G :内部编译器错误:分割故障(程序CC1PLUS) - 我在哪里开始
- 我在计算 4 个值的方差时的错误在哪里
- 我的调试器说我有一个隔离错误错误,但无法告诉我在哪里,在非常特殊的情况下发生
- 我在Qt信号和插槽问题上的错误在哪里?
- c++双自由或损坏(fasttop)--不确定错误在哪里
- 我的代码中的错误在哪里
- C++外部程序集:我的代码中的错误在哪里
- 此代码中的分段错误在哪里
- 随机生成器测试.错误在哪里
- 树程序中的错误在哪里
- 我的C++代码中的错误在哪里
- 错误在哪里?显示字符串C++Vignere密码
- 我是使用getline的新手,错误在哪里?
- 这个函数请求用户通过循环输入文件名的错误在哪里?
- C++11 可变参数模板函数 -- 错误在哪里?