我的阵列什么都没显示有人可以帮忙吗?这是源代码

时间:2016-11-17 22:38:00

标签: c++

下面的代码包含主文件,标题和.cpp文件。 运行代码时,屏幕上不显示任何内容。在构建它时,没有错误也没有警告。然而,运行它不会显示任何内容。

#include <iostream>
#include "Flight.h"

using namespace std;

int main()
{
Flight f (201, 8,6);
f.displaySeats();
return 0;
}





#ifndef FLIGHT_H
#define FLIGHT_H


class Flight {
public:
    Flight( int fNo,  int row,  int col);
    ~Flight();
    void setFlightNo( int no);
    int getFlightNo();
    void setSeats(int row,  int col);
    void initializeSeats();
    char **getSeats();
    void displaySeats();

private:
    int flightNo;
    char **seats;
    int rows;
    int cols;
};

#endif // FLIGHT_H


#include "Flight.h"
#include <iostream>
using namespace std;

Flight::Flight(int fNo, int row, int col)
{
setFlightNo(fNo);
setSeats(row, col);
initializeSeats();
rows = row;
cols = col;
}

Flight::~Flight()
{

}

void Flight::setFlightNo(int fNo) {
flightNo = fNo;
}

void Flight::setSeats(int rowNo, int colNo) {
seats = new char *[rowNo];
for (int i = 0; i < rowNo; i++) {
    seats[i] = new char[colNo];
}
}

void Flight::initializeSeats() {
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        seats[i][j] = 'o';
    }
}
}

void Flight::displaySeats() {
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        cout << seats[i][j] << "\t";
    }
    cout << endl;
}
}

1 个答案:

答案 0 :(得分:0)

在方法setSeats()中,您新建了一些数组,但在运行initializeSeats()之前没有设置行和列。因此,当您尝试使用它们时,数据属性行和列未初始化。未初始化的数据是未定义的行为。

建议使用ctor来初始化值。

我建议在initializeSeats()中添加一个assert(),这样编译器会告诉你你没有初始化行和列。

调试器帮我在90秒左右找到了这个。真的,学习gdb。你需要的是

  • b main - 在主

  • 设置断点
  • r - 运行程序,它将在第1个断点处停止

  • n - 下一个陈述的步骤

  • s - 进入下一个功能的步骤

  • p - 打印信息

    尝试“p * this”,你会看到行和列未初始化,但是    你需要了解0是偶然的,不能保证。

    (gdb)p * this

    $ 7 = {flightNo = 201,seat = 0xeb49e1a454f09a00,rows = 0,cols = 0}

关于这个错误的另一个观点是选择了错误的初始化机制。我建议你使用更像:

Flight::Flight(int fNo, int row, int col) :
    flightNo (fNo),
    // stuff for seats later (why are you using arrays?)
    rows (row),
    sols (col)
{
   setSeats(row, col);  // this method does NOT seem to set anything
                        // perhaps a better name .. can you describe what
                        // the method does?

   initializeSeats();   // by this invocation, rows and cols are set
}