Динамически распределять память для массива int, преобразованного в строку в C - PullRequest
0 голосов
/ 12 июня 2018

У меня есть целочисленный массив, который динамически распределяется следующим образом:

int *ranArr(int size) {
    int *arr= malloc(size *sizeof(int));

    for(int i = 0; i < size; i++) {
        arr[i] = genRan(size);
    }

    return arr;
}

Я хочу динамически выделить память для строки, в которую я преобразую свой целочисленный массив, и сохранить ее в строке:

        int *arrayCopy = ranArr(size);
        int arrayCopyLen = size;
        char *arrayString= (char*) malloc(size * sizeof(char));
        int index = 0;
        for(int i = 0; i< arrayCopyLen ; i++) {
            index += sprintf(&arrayString[index], "%d ,", arrayCopy[i]);
        }
        int arrayStringLen = strlen(arrayString)+1;

Это работает для массивов размером около 1000, но когда я устанавливаю размер в 2000 или около того, он ломается, и я получаю ошибку сегментации.

1 Ответ

0 голосов
/ 12 июня 2018

Вы не выделяете достаточно памяти для вашей строки.

Преобразование одной строки int в строку занимает до 12 байтов, при условии, что int составляет 32 бита.Например, для преобразования значения -2000000000 в строку требуется 12 символов.Таким образом, вам нужно по крайней мере 12 * size байт для вашей строки, плюс место для символов ", " и нулевого терминатора.

Кроме того, sizeof(char) равно 1 по определению, поэтому не нужно умножать на это.

char *arrayString = malloc(size * 14 + 1);   
// 14 = 12 bytes for a 32-bit int plus 2 bytes for ", "
...