打印矩阵后分割错误,但在打印额外行后修复(ostream <<操作器)



仅创建一个矩阵并将其打印出来后,我得到一个分割错误...我的矩阵的所有字符都被打印出来,但在我打印的最后一行之后:

std::cout << endl;

我得到分割错误。

我的代码:

页眉:

class Board{
private:
struct coord {
int x;
int y;
};
coord _coord;
char** board;
int size;
public:
Board(int v);   
//~Board();
friend std::ostream& operator<<(std::ostream& os, Board const &b); 
};

我的CPP代码:

Board::Board(int v)
{
size = v;
board = new char* [size];
for (int i=0; i<size; i++)
{
board[i] = new char[size];
for(int j = 0 ; j < size ; j++){
board[i][j] = '*';
}
}
}
ostream& operator<<(std::ostream& os, Board const &b)
{
for(int i = 0 ; i < b.size ; i++){
for(int j = 0 ; j < b.size ; j++){
cout << b.board[i][j] << " ";
}
cout << endl; // when (i == 3) the debug tells me after this I am thrown out
}
//cout << " "  << endl;
}

我的主要:

#include "Board.h"
#include <iostream>
#include <vector>
//#include <map>
using namespace std;
int main() {
Board board1{4};  // Initializes a 4x4 board
cout << board1 << endl; 
return 0;
}

然后我得到:

* * * * 
* * * * 
* * * * 
* * * * 
Segmentation fault

但是如果我不评论:"//cout <<" " <<endl;">我不再有任何分割错误。

问题出在哪里? 它看起来太简单了,但仍然,我得到了一个错误。(带有额外的cout<<" "<<结尾;我可以继续并放弃我的作业,但我相信我应该学习更多并找出问题所在(

我在这里看到,在某些情况下,我正在到达内存中的一个区域,我不应该到达,但我知道并且我正在询问我的具体代码,这就是为什么它不是重复的。另外,这里有一个类似的问题,但很具体,与我的问题无关。

这甚至可以编译吗?您缺少运算符的返回语句<<重载。你的实现也是错误的,你应该使用传递给函数的 ostream 进行打印,而不是直接使用 cout 然后返回它:

friend ostream& operator<<(std::ostream& os, Board const &b)
{
for (int i = 0; i < b.size; i++) {
for (int j = 0; j < b.size; j++) {
os << b.board[i][j] << " ";
}
os << endl; // when (i == 3) the debug tells me after this I am thrown out
}
os << " "  << endl;
return os;
}

cout 是可用的 ostream 对象之一(还有 cerr 和 clog(,您希望您的操作员支持所有这些对象。话虽如此,您应该使用 STL 容器而不是使用原始指针。

相关内容

  • 没有找到相关文章

最新更新