当我将字符串指针设置为Int值时QT崩溃

时间:2016-01-10 04:54:44

标签: c++ qt

我有一个在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来检查其他问题。

2 个答案:

答案 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;