Vector size()返回看似随机的大整数
Vector size() returning seemingly random large integers
我正在编写一个家庭作业程序,遇到了一个奇怪的问题。当试图使用size()函数获取2D向量的大小时,我会得到看似随机的大整数,这些整数会阻止我的程序运行。我需要访问向量中元素的大小。
我的头文件:
#ifndef _MATRIX_H
#define _MATRIX_H
#include <iostream>
#include <vector>
class Matrix {
private:
//int dimension;
std::vector< std::vector<int> > matrix;
public:
Matrix();
Matrix(std::vector< std::vector<int> >);
void print();
Matrix operator-(Matrix operand);
};
#endif
我的实现文件:
#include "Matrix.h"
#include <iostream>
#include <vector>
// Default constructor
Matrix::Matrix() {
}
// Parameterized constructor
Matrix::Matrix(std::vector< std::vector<int> >) {
}
void Matrix::print() {
std::cout << "Size of matrix in print() " << matrix.size() << std::endl;
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix.size(); j++) {
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
}
Matrix Matrix::operator-(Matrix operand) {
Matrix difference;
std::vector< std::vector<int> > diffMatrix;
diffMatrix.resize(matrix.size());
for (int i = 0; i < matrix.size(); i++ ) {
diffMatrix[i].resize(matrix.size());
}
difference.matrix = diffMatrix;
if (operand.matrix.size() == matrix.size()) {
for (int i = 0; i < operand.matrix.size(); i++) {
for (int j = 0; j < operand.matrix.size(); j++) {
difference.matrix[i][j] = matrix[i][j] - operand.matrix[i][j];
}
}
}
}
和我的main.cpp文件:
#include "Matrix.h"
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
vector< vector<int> > testMatrixOne(4);
vector< vector<int> > testMatrixTwo(4);
// Creating a test matrix
testMatrixOne = {{1,2},{3,4}};
testMatrixTwo = {{5,6},{7,8}};
// Create Matrix object
Matrix matrixOne(testMatrixOne);
Matrix matrixTwo(testMatrixTwo);
// Create Matrix to store difference
Matrix diff;
diff = matrixOne - matrixTwo;
diff.print();
return 0;
}
我简化了代码,并用两个矩阵进行了硬编码。运行程序时,size()将返回一个非常大的整数。我花了几个小时在网上搜索,但找不到原因。size()函数为什么要这样做?
不幸的是,问题是:
Matrix Matrix::operator-(Matrix operand) {
从不返回值。这会导致未定义的行为,您看到的症状是-
返回垃圾的结果。
在函数的末尾,您的意思是:
return difference;
}
C++标准不要求编译器对此发出警告,但如果它们发出警告,那还是很好的。我的g++版本没有(即使有-Wall),但是添加标志-Wreturn-type
确实会产生警告。IDK为什么这不是-Wall
的一部分,至少对于像这样的简单情况。
相关文章:
- 生成线性随机整数C++
- 如何生成 0 到 0x7FFFFFFF 的随机整数?
- 生成随机整数
- C++:随机数列表:x 个随机整数
- 列出小于 10 的不同随机整数
- 在 c++ 中生成随机整数
- 随机整数仍在生成低于或高于范围的数字?
- C++,为什么我不能使用两个默认随机引擎生成独立的随机整数样本
- 在 C++ 中使用 10 个随机整数的数组进行气泡排序不起作用
- C++ 如何生成 10,000 个 UNIQUE 随机整数以存储在 BST 中?
- 如何将唯一的随机整数插入链表中
- 伪随机整数
- 将随机整数写入文本文件而不重复
- 编写一个程序,该程序在0-99范围内生成10000个随机整数,并从随机数据中产生直方图
- 尝试创建随机整数向量时的OpenMPI编译器错误
- 防止随机整数不断被重新分配
- 除法函数随机整数需要打印出商和余数
- 如何生成升序随机整数列表
- 需要在指定范围内生成一个随机整数
- 对随机整数的未定义引用