我有一个类定义:
#include <stdio.h>
#pragma warning(disable:4996)
#define MAX_ROW 10
#define MAX_COLUMN 40
class VideoSim
{
private:
char video[MAX_ROW][MAX_COLUMN];
int currentRow;
int currentColumn;
public:
VideoSim::VideoSim(void);
VideoSim::~VideoSim(void);
void clearScreen(void);
int setCursorPosition(int row, int column);
};
我也有我的.cpp文件包含这些方法:
#include "VideoSim.h"
VideoSim::VideoSim(void)
{
currentRow = 0;
currentColumn = 0;
video[MAX_ROW][MAX_COLUMN] = { 0 };
}
VideoSim::~VideoSim(void)
{
printf("Dead Video \n");
}
void VideoSim::clearScreen(void)
{
int count = 0;
char *pVideo = video[count];
for (count = 0; count < (MAX_ROW * MAX_COLUMN); count++)
{
*(pVideo++) = ' ';
}
}
int VideoSim::setCursorPosition(int newRow, int newColumn)
{
if (newRow >= 0 && newRow <= MAX_ROW && newColumn >= 0 && newColumn <= MAX_COLUMN)
{
currentColumn = newColumn;
currentRow = newRow;
return 0;
}
else
{
return 1;
}
}
现在这是我的主要问题:
#include "VideoSim.h"
int main(void)
{
VideoSim v;
return 0;
}
程序创建名为v
的VideoSim对象,但随后崩溃......知道为什么会这样吗?
答案 0 :(得分:1)
最简单的方法:
char video[MAX_ROW][MAX_COLUMN] = {{0}};//initialize all elements to NULL
答案 1 :(得分:1)
如果要在数组中将所有元素初始化为0,则必须使用初始化语法:
VideoSim::VideoSim()
: video{}
{
currentRow = 0;
currentColumn = 0;
}
在行video[MAX_ROW][MAX_COLUMN] = { 0 };
中,您将零写入video[MAX_ROW][MAX_COLUMN]
,这是一个超出界限的错误。
您还可以将零初始化放在类定义中:
char video[MAX_ROW][MAX_COLUMN]{};
如果最终添加自定义构造函数,则可以通过提供与上面构造函数中的初始化不同的初始化来覆盖此默认初始化。
答案 2 :(得分:0)
VideoSim::VideoSim(void)
{
currentRow = 0;
currentColumn = 0;
memset(video,0, sizeof(video));
}