如何修复初学者C++;密码? 我对C++语言很陌生,试图完成一个非常简单的代码挑战,总结数组中的所有数字。测试环境没有显示错误消息,它只给我一个退出代码139。根据一些研究,这意味着我的代码产生了未定义的行为(也可能是内存碎片?)。这只是语法方面的东西还是我对C++的一些遗漏? #include <vector> int sum(std::vector<int> nums) { int runningSum = 0; for (int i=0; i <= nums.size(); i++) { runningSum = runningSum + nums[i]; } std::cout << "The total sum for nums: " << runningSum; } #包括 整数和(标准::向量nums){ int runningSum=0; 对于(inti=0;i
,函数应该返回,但是没有返回,所以这里有未定义的行为 你的循环超出了向量的最后一个元素,它有另一个UB 以下是固定版本:如何修复初学者C++;密码? 我对C++语言很陌生,试图完成一个非常简单的代码挑战,总结数组中的所有数字。测试环境没有显示错误消息,它只给我一个退出代码139。根据一些研究,这意味着我的代码产生了未定义的行为(也可能是内存碎片?)。这只是语法方面的东西还是我对C++的一些遗漏? #include <vector> int sum(std::vector<int> nums) { int runningSum = 0; for (int i=0; i <= nums.size(); i++) { runningSum = runningSum + nums[i]; } std::cout << "The total sum for nums: " << runningSum; } #包括 整数和(标准::向量nums){ int runningSum=0; 对于(inti=0;i,c++,arrays,for-loop,C++,Arrays,For Loop,,函数应该返回,但是没有返回,所以这里有未定义的行为 你的循环超出了向量的最后一个元素,它有另一个UB 以下是固定版本: int sum(std::vector<int> nums) { int runningSum = 0; for (int i=0; i < nums.size(); i++) { // ^^^^ runningSum = runningSum + nums[i]; } std::cout <<
int sum(std::vector<int> nums) {
int runningSum = 0;
for (int i=0; i < nums.size(); i++) {
// ^^^^
runningSum = runningSum + nums[i];
}
std::cout << "The total sum for nums: " << runningSum;
return runningSum;
// ^^^^
}
int和(标准::向量nums){
int runningSum=0;
对于(int i=0;i std::cout很抱歉,我必须返回结果。我还必须删除我还想添加一个关于使用std::vector::operator[]
的快速说明
从文档中可以看出,它返回向量中元素的引用。但与std::vector::at
不同,使用带有数字n>=vector.size()
的运算符[]
会导致未定义的行为
如果您使用的是std::vector::at
,它会抛出一个超出范围的异常,这是一个更为健谈的异常。想想您的循环在最后一次迭代中尝试访问向量的哪个元素……标准库为此提供了std::acculate
。您的问题是VTC作为一个输入错误。中的有效索引创建一个容器应该是你首先要学习的。如果你还没有学会,请使用at()。(注意:这应该是你在这里发布之前做的第一件事。你收到的反对票可能是由于缺乏研究)该函数看起来应该返回结果,而不是打印结果……这是Oblivion所说的,因此最好接受他们的答案并将其添加为注释,而不是添加其他人已经给出的答案的副本。还有const&as参数作为cherry on the cake,谢谢添加到答案中
int sum(const std::vector<int>& nums)