我正在開發一個QT窗口小部件的應用與C++,用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
沒有運氣,並打開有關使用其他功能的建議。
首先,如果您使用C++編程,爲什麼不使用'new'而不是'malloc'?或者更好的是,['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)而不是處理你自己的內存? –
感謝您的提示。 –
當您爲GUESS分配內存時,您正在使用未初始化的變量DIGIT_COUNT。這是對的嗎? – sajas