在 for 循环中使用变量,导致段错误

Using a variable in a for loop, causing segfault

本文关键字:段错误 错误 循环 for 变量      更新时间:2023-10-16

我正在练习运算符重载,我的目标是枚举我自己编写的向量类的所有值。

在这样做的过程中,我遇到了一个段错误(没什么大不了的(,并开始削减我的代码以找到它的来源。经过一些困难,我已经到了不明白出了什么问题的地步。

在尝试运行 for 循环以迭代矢量对象中的数据时,我发现如果我使用设置为 10 的变量s,我会得到段错误。如果我使用整数文字 10,它可以工作。

这对我来说意义不大,但话又说回来,我正在使用不熟悉的概念。任何帮助不胜感激!

这是一个MCVE:

使用 g++ Q1.cpp vector.h -o Q1 进行编译

演示课程(第 1 .cpp 季度(:

#include <iostream>
#include "vector.h"
#define INFO(x) std::cout << "[INFO]: " << x << std::endl;
int main(void) {
    // 1- Test the default constructor
    INFO(" ---------- Vector 1 ----------");
    vector v1;
    INFO(v1);
   return 0;
}

向量类 (vector.h(:

#include <iostream>
#include <string>
class vector {
public:
    float size;
    float* data;
    vector() : vector(0) {}
    vector(int s){
        size = s;
        data = new float[size]();
    }
};
std::ostream& operator<<(std::ostream& stream, const vector& obj){
    stream << "vector: size(" << obj.size << ")" << "n";
    int s = 10;
    for(int i = 0; i < s; ++i){  // problem occurs here, replace s with '10' and it works.
        stream << i;
        //stream << "data[" << i << "] = " << obj.data[i]; 
    } 
}

重载函数需要返回stream

此外,不要将size_t用作类成员名称。这完全令人困惑。

删除

vector时,还应删除data数组。它现在泄漏了。