realloc не срабатывает — c функции realloc

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Вопрос:


realloc не срабатывает

#pragma hdrstop
#pragma argsused

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <windows.h> //FOR WINDOWS ONLY

#ifdef _WIN32
#include <tchar.h>
#else
typedef char _TCHAR;
#define _tmain main
#endif



// Структура двогичного (бинарного) дерева

struct btree {
    double data; // данные
    struct btree *left; // левая ветвь
    struct btree *right; // правая ветвь
    struct btree *parent; // родитель
};

bool read_arg(char**, signed long long int**); // сигн. ф. считывания команд

int _tmain(int argc, _TCHAR* argv[]) {

/* ~~~~~~~~~~~~~~~~~~~~~~ ПЕРЕМЕННЫЕ ~~~~~~~~~~~~~~~~~~~~~~~~~ */

// Динамические массивы
char *command_comblock; // Массив комманд
signed long long int *value_comblock; // Массив значений

/* ~~~~~~~~~~~~~~~~~~~~~ КОММАНДЫ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

//Включаем русский в консоли
SetConsoleOutputCP(1251); //FOR WINDOWS ONLY

// Ввод и анализ на верность комманд
if (read_arg(&command_comblock, &value_comblock) != true) {
    // Если что-то пошло не так при вводе в первый раз (попробуем еще разок)
    if (read_arg(&command_comblock, &value_comblock) != true) {
        // Что-то явно не так со вводом (тест на похмелье :D)

        // ScreenCleaner
        system("cls"); // FOR WINDOWS ONLY
        // system("clear"); //FOR LINUX ONLY

        // Выдача ошибки
        return 315;
    }
}

// Разбор введеных аргументов
system("pause");
return 0;
}

bool read_arg(char** command_comblock, signed long long int** value_comblock) {
// ПЕРЕМЕННЫЕ
char temp;

// Первоначальное выделение места массивам
if ((*command_comblock = (char *)malloc(sizeof(char))) == NULL) {
    printf("Realloc Error! [command_comblock]");
    return false;
}

if ((*value_comblock = (signed long long int *)malloc
    (sizeof(signed long long int))) == NULL) {
    printf("Realloc Error! [value_comblock]");
    return false;
}

// Непосредственное считывание
printf("Вводите комманды, как в k806.ru [Для Win. Ctrl+Z -> конец ввода]n");
*value_comblock[0] = 0;
*command_comblock[0] = 0;
while (temp != EOF) {
    temp = getchar();
    switch (temp) {

        // Операция вывода дерева
    case 'p':
        *value_comblock[0]=*value_comblock[0]+1;
        if ((*command_comblock = (char*)realloc(*command_comblock,
            ((*value_comblock[0])*sizeof(char)))) == NULL) {
            printf("Realloc Error! [command_comblock]");
            return false;
        }
        printf("%d", sizeof(*command_comblock));
        *command_comblock[*value_comblock[0]-1] = temp;
        break;

    //
    }

}

return true;
}

Я думаю — проблема здесь

if ((*command_comblock = (char*)realloc(*command_comblock,
        ((*value_comblock[0])*sizeof(char)))) == NULL) {
        printf("Realloc Error! [command_comblock]");
        return false;

Или здесь

*command_comblock[*value_comblock[0]-1] = temp;

Автор вопроса: SlimRG

zed

Всё дело в приоритетах операций * и [ ].

У операции индекса [ ] приоритет выше, чем у операции разыменовывания адреса *, т.е. всюду, где вы пишите *x[i] надо писать (*x)[i]:

(*value_comblock)[0] = 0;
(*command_comblock)[0] = 0;
...
  (*value_comblock)[0]++;
  if ((*command_comblock = realloc(*command_comblock, (*value_comblock)[0] * sizeof(char))) == NULL) {
    printf("Realloc Error! [command_comblock]");
    return false;
  }
...
(*command_comblock)[(*value_comblock)[0]-1] = temp;

Источник

Вам также может быть интересно:

Drag and Drop UWP — c# xaml mvvm
Вопрос: Нужно иметь возможность добавлять изображения в приложение путем перетаскивания из файловой системы У Grid включил AllowDrop. Но как добавить перетаскиваемые изображения в коллекцию? Т.к. те ...
Растягивание Высоты , Резина — html css html5
Вопрос: Здравствуйте! Реализовал резиновый дизайн. Растягивается ширина, но длина по % не растягивается. Возможно ли это реализовать? Или так и задумано, растягивание только на ширину ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
requestAnimation и очередность отрисовки — javascript canvas
Вопрос: Здравствуйте! Реализовал 2D игру и в Edge работает все плавно и круто, но в Firefox'e подвисает, сказали, что нужно сделать, чтобы раз-два момент и все ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
ViewPager внутри ViewPager — такие матрешки работают? — android viewpager
Вопрос: Доброго времени суток. Назрела новая задача. Есть каталог мастеров. При выборе конкретного мастера открывается его страница (активити с ViewPager), и теперь мастеров можно перелистывать свайпом. ...
Почему id всегда 1 Yii2 — yii авторизация
Вопрос: Использую все как по документации. Для получения информации о пользователе использую $identity = $model->findOne(]); И каким бы не был email, id пользователя всегда ...

Оставьте ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *