неправильный вывод в программе на C

не понимаю как работают указатели, вот в программе например выбивает нарушение права доступа, если их применяю, а без них просто выводит непонятно что

ошибка возникает в последнем цикле for, при обращении к masr[i] в блоке if

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

int str_convert(char* s, char parts[100][256]) {
    int r = 0;
    while (*s) {
        if (*s != ' ') {
            char* ptr = parts[r++];
            do {
                *(ptr++) = *(s++);
            } while (*s && *s != ' ');
            *ptr = '\0';
        }
        else
            s++;
    }
    return r;
}
int my_strcmp(char* s1, char* s2) {
    while ((*s1 != 0) && (*s1 == *s2)) {
        s1++;
        s2++;
    }
    return *s1 - *s2;
}

char reducted[][100] = {"etc.", "i.e.", "vs.", "e.g."};
char transcript[][100] = {"et cetera", "id est", "versus", "exempli gratia"};

int main() {
    char masr = (char) malloc(1024 * sizeof(char*));
    char *str = NULL;
    str = (char*) malloc(1024 *sizeof(char));
    
    printf("input string: ");
    char c;
    int z = 0;
    while ((c = getchar()) != '\n' && z < 99)
    {
        str[z] = c;
        z++;
    }
    str[z] = '\0';

    int size = strlen(str);
    int arrLen = str_convert(str, masr);

    for (int i = 0; i < arrLen; i++) {
        masr[i] = (char*)malloc(1024 * sizeof(char));
        int isPrinted = 0;
        for (int j = 0; j < 4; j++) {
            if (my_strcmp(reducted[j], masr[i]) == 0) {
                printf("%s ", transcript[j]);
                isPrinted = 1;
            }
        }
        free(masr[i]);
        if (!isPrinted) printf("%s ", masr[i]);
    }
    return 0;
}

Ответы (0 шт):