仅创建一个矩阵并将其打印出来后,我得到一个分段错误...我的矩阵的所有字符都被打印但是在最后一行之后我打印出来:
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&lt;&lt;”“&lt;&lt; endl;”我不再有分割错误。
问题出在哪里?它看起来太简单但仍然,我收到一个错误。 (使用额外的cout&lt;&lt;“&lt;&lt;&lt;&lt;&lt; endl; line我可以继续并在我的任务中给出,但我相信我应该学习更多并找出问题所在。)
我看到here在某些情况下,我到达了记忆中我不应该去的区域,但是我知道并且我在询问我的具体代码,这就是为什么它不是重复的。此外,here还有一个类似的问题,但具体而且与我的问题无关。
答案 0 :(得分:2)
这甚至可以编译吗?您缺少运营商的退货声明&lt;&lt;超载。您的实现也是错误的,您应该使用传递给函数的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容器而不是使用原始指针。