Я пытаюсь выделить матрицу строк с помощью malloc, но возвращает ошибку сегментации, что происходит? - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь выделить строковую матрицу, но в последней строке mt code возвращает Segmentation Fault, как я могу это исправить?

char **allocate(char ***map, int lin, int col){
    int index = lin;

    map = (char*** ) malloc(sizeof(char) * lin);

    for(int i = 0; i < index; i++){
        map[i] = (char**) malloc(sizeof(char) * col);
    }

    return (char**) map;
}

void **fill(char ***map, int index){

    printf("index: %d\n", index);

    for(int i = 0; i <index; ++i){
        for (int j = 0; j < index; ++j){
          map[i][j] = "aaaaaaaaa";
          printf("%s ", map[i][j]);
        }
        printf("\n");
    }

}



int main(){
    char **map = NULL;
    map = allocate(map,5,5);
    printf("\n");
    fill(map,5);
    return 0;
}

Я ожидаю показать только последнюю строку моегоматрица.

1 Ответ

0 голосов
/ 25 апреля 2019

Полагаю, вы имеете в виду что-то вроде следующего.

Обратите внимание, что "const" в виде строки является "const char *", а не "char *".

#include <malloc.h>
#include <stdio.h>

const char ***allocate(int lin, int col){
    int index = lin;

    const char ***map = (const char*** ) malloc(sizeof(char**) * lin);

    for(int i = 0; i < index; i++){
        map[i] = (const char**) malloc(sizeof(char*) * col);
    }

    return map;
}

void **fill(const char ***map, int index){

    printf("index: %d\n", index);

    for(int i = 0; i < index; ++i){
        for (int j = 0; j < index; ++j){
          map[i][j] = "aaaaaaaaa";
          printf("%s ", map[i][j]);
        }
        printf("\n");
    }

}



int main(){
    const char ***map = allocate(5,5);
    printf("\n");
    fill(map,5);
    return 0;
}

Вызовmalloc это много раз и наличие такого высокого уровня косвенности делает очень неэффективное кодирование.

В этом случае достаточно создать постоянный массив 5x5 из const char *

int main() {
  const char *map[5][5];
  for (int i = 0; i != 5; ++i) {
    for (int j = 0; j != 5; ++j) {
      map[i][j] = "I should write my own assignment.";
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...