Как правильно изменить 2d массив в C? - PullRequest
0 голосов
/ 27 октября 2018

HI Я получаю segfault с этим кодом:

#include <stdio.h>
#include <stdlib.h>

int     main()
{
    char **array;
    int i = 0;

    array = (char **)malloc(sizeof(char *) * 20);
    for (i = 0; i < 20; i++)
    {
        array[i] = (char *)malloc(sizeof(char *) * 20);
        array[i] = "____________________";
    }
    array[0][0] = '2';
    return(0);
}

Что я делаю не так?Я очень растерялся, когда мне нужно изменить 2-мерные массивы, какие мои лучшие варианты здесь?

Большое спасибо.

1 Ответ

0 голосов
/ 27 октября 2018

Вы получаете segfault, потому что с array[i] = "____________________"; вы разрешаете указывать каждому array[i] строковый литерал.Обратите внимание, что вы не копируете содержимое литерала, но позволяете array[i] напрямую указывать на него.Следовательно, с array[0][0] = '2' вы изменяете строковый литерал тогда, что является неопределенным поведением (в этом случае весьма вероятно проявится как segfault).

Используйте взамен strcpy(array[i],"____________________);.

Кстати: напишите array[i] = malloc(sizeof(char) * (20+1)); (обратите внимание на sizeof(char) вместо sizeof(char*) здесь и +1 для символа завершения строки).

...