Динамическое выделение памятки 2D матрицы символов в C - PullRequest
0 голосов
/ 11 мая 2019

Я не могу найти свою ошибку (ошибки) в следующем фрагменте. Я предполагаю, что с чтением что-то не так, я прокомментировал то, что пытался:

char **A; // pointers for the matrices
    int n, m;
    scanf("%d", &n);
    scanf("%d", &m);
    A = (char **) malloc(sizeof(char *) * n);
    if (A == NULL)
        exit(1);
    for(i=0; i < n; i++){
        A[i] = (char *)malloc(sizeof(char) * m);
        if (A[i] == NULL)
            exit(1);
    }
    for(i=0; i < n; i++){
        for(j=0; j < m; j++){
            scanf("%c", &A[i][j]);
            // A[i][j] = getchar();
            // getchar();
        }
    }
    for(i = 0; i < n; i++){
        for(j = 0; j < m; j++){
            // printf("[%d][%d]", i, j);
            printf("%c", A[i][j]);
        }
        printf("\n");
    }

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Подумайте об изменении этого значения:

for(i=0; i < n; i++){
    for(j=0; j < m; j++){
        scanf("%c", &A[i][j]);

на

for(i=0; i < n; i++){
    for(j=0; j < m; j++){
        scanf(" %c", &A[i][j]);

Это пространство сожрет и начальные пробелы или переводы строк или что-либо еще из ввода scanf() в начале программы.

И да, не разыгрывайте свои malloc() с согласно другому ответу.

0 голосов
/ 11 мая 2019

Не разыгрывайте результат malloc() (и друзей).

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

int main(void)
{
    int rows, cols;
    if (scanf("%d %d", &rows, &cols) != 2) {
        fputs("Input error. :(\n\n", stderr);
        return EXIT_FAILURE;
    }

    char *data = malloc(rows * cols * sizeof *data);
    if (!data) {
        fputs("Not enough memory. :(\n\n", stderr);
        return EXIT_FAILURE;
    }

    // access:
    // data[row * cols + col];

    free(data);
}
...