You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++向vector push_back随机数时输出异常值如何修复

错误原因
  • 结构体funcs的成员变量sum未初始化:C++中栈上实例化的结构体普通内置类型成员不会默认清零,初始值是内存残留的随机垃圾值,你在该值基础上累加自然会得到异常输出。
  • srand调用语法错误:代码中的srand;仅获取函数地址,并未实际执行随机种子初始化的逻辑,需要补充括号和入参才会生效,不过这不是本次异常输出的核心诱因,但属于需要修正的代码问题。
  • 若你的需求是计算vector内所有元素的和,当前循环中sum += 1的逻辑错误,仅能统计元素个数,需要改为累加元素本身的值。
修正后的代码
#include <iostream>
#include <vector>
#include <string>
#include <stdlib.h>
#include <ctime> // 引入时间头文件用于生成随机种子
using std::string;
using std::endl;
using std::cout;
using std::cin;

struct funcs
{
    std::vector<int> values;
    int sum = 0; // 显式初始化sum为0
    void createVectorValues(){
        while(values.size() < 100)
        {
            int x = rand() % 100;
            values.push_back(x);
        }
        for(int& a : values)
        {
            // 若要统计元素个数保留sum +=1,若要计算总和改为sum += a
            sum += a; 
        }
        cout << sum;
    }
};
int main()
{
    srand(time(nullptr)); // 正确调用srand,传入时间作为随机种子
    funcs myFunct;
    myFunct.createVectorValues();
}
核心修改点说明
  • 给sum成员添加了默认初始值0,避免累加垃圾值
  • 修正了srand的调用逻辑,引入<ctime>头文件用系统时间作为随机种子,保证每次运行生成的随机数序列不同
  • 如果你原本的需求是统计vector元素个数,把循环内的语句改回sum += 1即可,执行后会输出100,属于正常结果。

内容的提问来源于stack exchange,提问作者Ethan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:27:03