我有一个在QT中运行的C ++程序,每当我到达此行时都会崩溃。我正在调试它并试图找出它崩溃的原因,但它对我没有任何意义。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
//set central widget for the Main Window
centralWidget = new QWidget(this);
this->setCentralWidget(centralWidget);
//creation and attribution of slider
slider = new QSlider();
slider->resize(255, 20);
slider->setOrientation(Qt::Horizontal);
slider->setRange(0, 255); //0-255 is range we can read
//layout with slider and lcd
main_layout = new QVBoxLayout();
main_layout->addWidget(slider);
//set layout to the widget inside MainWindow
centralWidget->setLayout(main_layout);
/*Connection Events*/
//connection between the slider event and the transmission function
QObject::connect(slider, SIGNAL(valueChanged(int)), this, SLOT(transmitCmd(int)));
}
void MainWindow::transmitCmd(int value)
{
//if value wasn't between 0-255, no transmission
if(value < 0 || value > 255)
return;
char *buffer = NULL; //create a buffer to store value
*buffer = value;
}
当我写* buffer = value时它会崩溃。不确定为什么会这样,并通过将char指针设置为int来检查其他问题。
答案 0 :(得分:4)
会发生这种情况,因为您正在尝试将数据写入NULL
指针。 char*
将可分配的地址保存到某个内存位置。
因此,当您声明buffer
变量时,您不会自动分配缓冲区来存储数据,它实际上是一个空链接。
当您尝试将数据写入char*
时,您正在写入内存地址为零,这会导致访问冲突异常。
为避免此异常,您可以使用new
运算符分配内存,该运算符还将为您的变量提供基址,如下所示:
char *buffer = (char*) new int(value);
答案 1 :(得分:1)
指针必须指向已存在的内容,然后才能解除引用。如果指针为NULL,则取消引用将崩溃。
char buffer[1] = {'\0'}; //create a buffer to store value
*buffer = value & 0xFF;