сбой realloc после многократного использования - PullRequest
0 голосов
/ 24 февраля 2019
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    char string[10];
    int count = 0;
    int buff = 1;
    int i = 0;
    char **test = malloc(sizeof(char*) * buff);

    while (1) {
        scanf("%s", string);
        count++;
        if (count > buff) {
            buff += buff;
            test = realloc(test, buff);
            test[i] = string;
            i++;
        }
        else {
            test[i] = string;
            i++;
        }
    }
}

Это просто некоторый тестовый код для большого проекта, над которым я работаю, страдая от той же проблемы (отсюда и почему бафф такой маленький).Я не уверен, почему, но realloc() не работает после ~ 2-3 звонков.Любая идея?

1 Ответ

0 голосов
/ 24 февраля 2019
 test = realloc(test, buff);

Вы выделяете в первом realloc два байта , затем три байта ...., а не пространство для двух, трех ... указателей

Ваша программа - это просто одно огромное Неопределенное поведение

 test = realloc(test, buff * sizeof(*test));

Кстати, все выделенные указатели будут указывать на одно и то же место в памяти.

test[i] = string; не выделяет место для строки и не копирует ее.

test[0] == test[1] == test[2] .... ==test[n], которая является последней отсканированной строкой

для хранения всех отсканированных строк, которые необходимо выделить в память и скопировать строку

test[i] = malloc(strlen(string) + 1);
strcpy(test[i], string);
...