我最近在我的数学项目中添加了一个新课程。
这是一个简单的类,应该执行基本的向量数学(加,减,...等)
当我运行代码时,出现以下错误 -> 抛出异常:读取访问冲突。 _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));
}
我忘了添加 point_vector_math = new Vector_Math(); &删除point_vector_math;指向实际需要的指针。只有真正的初学者才使用对象。