我正在使用 C ++ 开发 QT小部件应用程序,其功能为 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_NUM
和j
显示正确的值。
在尖线处发生分段故障,我不明白为什么。我在这里错过了什么?请注意,我已经尝试strcpy
但没有运气,并且可以提供有关为此目的使用其他功能的建议。
答案 0 :(得分:4)
这可能有问题:
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提供了一种实际检查转化是否成功的方法。使用它,它是为了你自己的利益。
答案 1 :(得分:-2)
我无法看到您释放所有使用的资源。
明智地使用free()......
例如..
free(TEMP_NUM);