从不正确定义的类或 std::vector 中丢失了数据?

问题描述 投票:0回答:1

我最近在我的数学项目中添加了一个新课程。

这是一个简单的类,应该执行基本的向量数学(加,减,...等)

当我运行代码时,出现以下错误 -> 抛出异常:读取访问冲突。 _My_data 是 0xCDCDCDD1。

当我运行断点并将鼠标悬停在向量调用上(在 .cpp 文件内)时,向量的分配槽状态为“无法读取内存”。

// --------------------------------------------- 类头--------------------------------------------------------

#ifndef _NUMVECTORMATH_H
#define _NUMVECTORMATH_H

#include <vector>

class Vector_Math
{
public:
    // constructor
    Vector_Math();

    void add_vectors();
    void subtract_vectors();
    void multiply_vectors();
    void divide_vectors();

    std::vector<float> get_vec_basic_1D_vector() { return vec_basic_1D_vector_c; }

private:

    bool bool_bad_value;

    std::vector<float> vec_basic_1D_vector_a
    {
        1.0,
        2.0,
        3.0,
        4.0
    };

    std::vector<float> vec_basic_1D_vector_b
    {
        5.0,
        6.0,
        7.0,
        8.0
    };

    std::vector<float> vec_basic_1D_vector_c;
};
#endif

// ----------------------------------- 类实现 ---------- ----------------------------

#include "vector_math.h"

    Vector_Math::Vector_Math()
    {
        bool_bad_value = false;
    }


    void Vector_Math::add_vectors()
    {
        if (vec_basic_1D_vector_a.size() == vec_basic_1D_vector_b.size()) // Exception thrown: read access violation. _My_data was 0xCDCDCDD1.
        {
            for (int var_count = 0; var_count < vec_basic_1D_vector_a.size(); var_count++)
                vec_basic_1D_vector_c.push_back(vec_basic_1D_vector_a.at(var_count) + vec_basic_1D_vector_b.at(var_count));
        }
    }


    void Vector_Math::subtract_vectors()
    {
        if (vec_basic_1D_vector_a.size() == vec_basic_1D_vector_b.size())
        {
            for (int var_count = 0; var_count < vec_basic_1D_vector_a.size(); var_count++)
                vec_basic_1D_vector_c.push_back(vec_basic_1D_vector_a.at(var_count) - vec_basic_1D_vector_b.at(var_count));
        }
    }



    void Vector_Math::multiply_vectors()
    {
        if (vec_basic_1D_vector_a.size() == vec_basic_1D_vector_b.size())
        {
            for (int var_count = 0; var_count < vec_basic_1D_vector_a.size(); var_count++)
                vec_basic_1D_vector_c.push_back(vec_basic_1D_vector_a.at(var_count) * vec_basic_1D_vector_b.at(var_count));
        }
    }

    void Vector_Math::divide_vectors()
    {
        if (vec_basic_1D_vector_a.size() == vec_basic_1D_vector_b.size())
        {
            for (int var_count = 0; var_count < vec_basic_1D_vector_a.size(); var_count++)
                if (vec_basic_1D_vector_a.at(var_count) == 0) bool_bad_value = true;
                else if (vec_basic_1D_vector_b.at(var_count) == 0) bool_bad_value = false;
    
            if (!bool_bad_value)
                for (int var_count = 0; var_count < vec_basic_1D_vector_a.size(); var_count++)
                    vec_basic_1D_vector_c.push_back(vec_basic_1D_vector_a.at(var_count) / vec_basic_1D_vector_b.at(var_count));
            else
                for (int var_count = 0; var_count < vec_basic_1D_vector_a.size(); var_count++)
                    vec_basic_1D_vector_c.push_back(0);
        }
    }

// --------------------------------------------------------- 主要! !! --------------------------------------------------------

#include <iostream>
#include <string>
#include "vector_math.h"

Vector_Math* point_vector_math;

int main()
{
    std::vector<float> vec_basic_vector_output;

    point_vector_math->add_vectors();

    //
    vec_basic_vector_output = point_vector_math->get_vec_basic_1D_vector();

    //
    for (int var_count = 0; var_count < vec_basic_vector_output.size(); var_count++)
        std::cout << "\n Vector Addition -> " + std::to_string(var_count) + ": " + std::to_string(vec_basic_vector_output.at(var_count));

    //
    point_vector_math->subtract_vectors();
    //
    vec_basic_vector_output = point_vector_math->get_vec_basic_1D_vector();
    //
    for (int var_count = 0; var_count < vec_basic_vector_output.size(); var_count++)
        std::cout << "\n Vector Subtraction -> " + std::to_string(var_count) + ": " + std::to_string(vec_basic_vector_output.at(var_count));

    //
    point_vector_math->multiply_vectors();
    //
    vec_basic_vector_output = point_vector_math->get_vec_basic_1D_vector();
    //
    for (int var_count = 0; var_count < vec_basic_vector_output.size(); var_count++)
        std::cout << "\n Vector Multiplication -> " + std::to_string(var_count) + ": " + std::to_string(vec_basic_vector_output.at(var_count));

    //
    point_vector_math->divide_vectors();
    //
    vec_basic_vector_output = point_vector_math->get_vec_basic_1D_vector();
    //
    for (int var_count = 0; var_count < vec_basic_vector_output.size(); var_count++)
        std::cout << "\n Vector Division -> " + std::to_string(var_count) + ": " + std::to_string(vec_basic_vector_output.at(var_count));
}
c++
1个回答
0
投票

我忘了添加 point_vector_math = new Vector_Math(); &删除point_vector_math;指向实际需要的指针。只有真正的初学者才使用对象。

© www.soinside.com 2019 - 2024. All rights reserved.