Prikaz jedne poruke
Stara 8.8.2017, 17:31   #5
NovaNada
Član
 
Član od: 13.3.2017.
Poruke: 55
Zahvalnice: 30
Zahvaljeno 3 puta na 3 poruka
Određen forumom Re: C program i curenje memorije

Uradiću i na taj način.
Sada sam implementirao sličan program, samo što reči stavlja u dinamički niz, tj. matricu. Valgrind kaže da je sve dobro, ali meni se ne sviđa rešenje jer nikada nisam video da iko koristi char***. Da li može drugačije da se uradi?
Kod:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#define LENGHT 81

#define ALLOCCHECK(x) if ((x) == NULL) exit(-2)

char** add_to_matrix(char** m, char *word, int *n);

void read_line(char*** m, int *n)
{
    char input[LENGHT+1], word[LENGHT], *c;
    unsigned i;

    if (fgets(input, LENGHT-1, stdin) == NULL)
        exit(-2);

    c = input;
    while (1) {
        i = 0;
        while (*c != ' ' && *c != '\n') {
            word[i++] = *c;
            c++;
        }
        word[i] = '\0';

        *m = add_to_matrix(*m, word, n);

        if (*c != '\n') {
            c++;
        } else {
            break;
        }
    }
}

char** add_to_matrix(char** m, char *word, int *n)
{
    if (m != NULL) {
        m = realloc(m, (*n+1)*sizeof(char*));
        ALLOCCHECK(m);
        *(m + *n) = malloc(sizeof(word)+1);
        strcpy(*(m + *n), word);
        (*n)++;

    } else {
        m = malloc(sizeof(char*));
        ALLOCCHECK(m);
        *m = malloc(sizeof(word)+1);
        ALLOCCHECK(*m);
        strcpy(*m, word);
        (*n)++;
    }

    return m;

}

int main(void)
{
    int n = 0; /*broj elemenata u matrici*/
    char** m = NULL; /*matrica*/

    read_line(&m, &n);

    for (int i = 0; i<n; i++) {
        printf("%s\n", *(m+i));
        free(*(m+i));
    }
    
    free(m);

    return 0;
}
NovaNada je offline   Odgovor sa citatom ove poruke