@polger

Как правильно объявить и заполнить динамический массив указателей на строки?

Я пытаюсь динамически заполнить массив строк по указателям.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>

void foo(char ***arr) {
    *arr = (char **)malloc(sizeof(char *) * 10);

    *arr[0] = (char *)malloc(100);
    *arr[0] = "xxxxxxxxx";
    *arr[1] = (char *)malloc(100);
    *arr[1] = "yyyyyyyyy";
}

int main(int argc, char argv) {
    char **arr = NULL;

    foo(&arr);

    printf("%s\n", arr[0]);
    printf("%s\n", arr[1]);
    
    return 0;
}

Но в строке *arr[1] = (char *)malloc(100); происходит ошибка Segmentation fault. Уже по всякому пробовал. Не могу понять как правильно написать код. В чём ошибка?

Пробовал так без функции
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>

int main(int argc, char argv) {
    char **arr = NULL;

    arr = (char **)malloc(100);
    arr[0] = (char *)malloc(10);
    arr[1] = (char *)malloc(10);

    arr[0] = "xxxxxxxxx";
    arr[1] = "yyyyyyyyy";
    
    printf("%s\n", arr[0]);
    printf("%s\n", arr[1]);
    
    return 0;
}

Всё работает. Хотя если этот код работает, то не факт, что он правильно работает.
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Скобки вокруг *arr расставьте. И еще, вы зря делаете malloc() для самих строк - вы потом присваеваете адрес строковой константы. Или делайте strcopy, или не выделяйте память под (*arr)[i].
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы