c++ - 从数组复制到变量导致计算器溢出

标签 c++ c qt

我正在使用 C++ 开发一个 QT Widgets 应用程序,具有 C 的功能。我并不是说我在写 C++,所以请避免说“这不是 C++”。这是我的代码:

#include <string.h>
#include <stdio.h>

----------------------------------------------------------

class MainWindow : public QMainWindow
{

private:

    char**  NUM_ARRAY;
    char*   GUESS;
    int     DIGIT_COUNT;
    int     NUM_COUNT;

    void fill_array();
    bool num_valid(char *NUM);
};

----------------------------------------------------------

void MainWindow::fill_array()
{
    int i, j = 0;
    int START       = 1;
    int END         = 9;
    int CTR_START   = 0;
    int CTR_END     = 0;

    NUM_COUNT   = 1;
    GUESS       = (char*)malloc(DIGIT_COUNT * sizeof(char));
    DIGIT_COUNT = ui->LE_DIGIT_COUNT->text().toInt();

    char* TEMP_NUM = (char*)malloc(DIGIT_COUNT * sizeof(char));

    for (i = 0; i < DIGIT_COUNT; i++)
    {
        NUM_COUNT *= END;
        CTR_START = (CTR_START * 10) + (START++);
        CTR_END   = (CTR_END * 10) + (END--);
    }

    NUM_ARRAY = (char**)malloc(NUM_COUNT * sizeof(char*));

    for (i = CTR_START; i <= CTR_END; i++)
    {
        NUM_ARRAY[j] = (char*)malloc(DIGIT_COUNT * sizeof(char));

        sprintf(TEMP_NUM, "%d", i);

        if (num_valid(TEMP_NUM))
            memcpy(NUM_ARRAY[j++], TEMP_NUM, DIGIT_COUNT * sizeof(char));
    }

    memcpy(GUESS, NUM_ARRAY[0], DIGIT_COUNT * sizeof(char)); <----- ERROR
    ui->L_GUESS->setText(GUESS);
}

我正在做的是;填充由 1234 到 9876 之间的数字组成的字符串数组。这些数字不包含任何 0 或多次包含相同数字。我调试了代码,一切似乎都很好。我无法观看 NUM_ARRAY;它显示 NUM_ARRAY "1234"char*,但我确信数组已正确填充,因为 TEMP_NUMj 显示正确的值。

在指向的线上,发生段错误,我不知道为什么。我在这里错过了什么?请注意,我已经尝试过 strcpy 但没有成功,并开放了关于为此目的使用其他函数的建议。

最佳答案

这可能有问题:

GUESS       = (char*)malloc(DIGIT_COUNT * sizeof(char));
DIGIT_COUNT = ui->LE_DIGIT_COUNT->text().toInt();

即:您在实际初始化之前使用了 DIGIT_COUNT,因此其中包含一些垃圾数据。

还有:

http://qt-project.org/doc/qt-4.8/qstring.html#toInt提供了一种实际检查转换是否成功的方法。使用它,它是为您好。

关于c++ - 从数组复制到变量导致计算器溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24758132/

相关文章:

c++ - 如何在外部目标文件中调用重命名的符号?

c - C中复合文字的问题

c++ - Qt - 从主窗口显示第二个窗口

c++ - 在 C++ 中创建 SVG 图像

c++ - 如何从 C++ 显示 C# 中结构的值

c++ - 关键字 "shared"是否可以防止竞争条件?

c - 如何在特定范围内创建新的随机整数

c - 使用GTK/GDK获取Pango渲染的像素

javascript - 为什么添加 Javascript 窗口对象时 Vtable 链接会出现问题?

c++ - retranslateUi的自动调用