копирование из массива в переменную вызывает стекоперемещение

0

Я разрабатываю приложение QT Widgets с помощью 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 без везения и открываю для предложений об использовании других функций для этой цели.

  • 0
    Для начала, если вы программируете на C ++, почему бы вам не использовать new вместо malloc ? Или, что еще лучше, std::vector вместо того, чтобы обрабатывать память самостоятельно?
  • 0
    Спасибо за чаевые.
Показать ещё 3 комментария
Теги:
qt

2 ответа

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 предлагает способ проверить, успешно ли выполнено преобразование. Используйте его, он есть для вашего же блага.

  • 0
    Спасибо за ответ
  • 0
    не беспокойтесь о том, чтобы приложить дополнительные усилия, я приму ваш ответ, я просто жду окончания срока.
Показать ещё 3 комментария
-2

Я не вижу, что вы освобождаете все используемые ресурсы.

Используйте бесплатный() разумно...

пример..

free(TEMP_NUM);
  • 0
    Спасибо за чаевые.
  • 4
    Хотя это хороший комментарий, на самом деле он не отвечает на вопрос ОП.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню