двумерный динамический массив c

Создаю двумерный массив по мере того как пользователь вводит символ яерез getchar. программа раблтает корректно если вводить до 10 слов. если ввести 10 или больше программа выводит непонятные символы. в чем проблема

#include<stdio.h>
#include<stdlib.h>
int x=0;
void my_array(char** words,char** str,char* tmp){
    int len=0,z=0;
    char c;
    while ((c = getchar()) != '\n') {
        if (words!=NULL){
            if (c!=' '){
                words[x][len]=c;
                tmp = (char*)realloc(words[x],(len+1)*(sizeof(char)));
                words[x]=tmp;
                
                len++;   
            }                                                                                                                           
            else{
                words[x][len] = '\0';
                str = (char**)realloc(words,(x+1)*(sizeof(char)));
                x++;
                words=str;
                words[x] = (char*)malloc(sizeof(char));
                len=0;
            }
        }
    }
    if (words!=NULL){
        words[x][len] = '\0';
    }
}
int main() {
    char** words=NULL; 
    char* tmp=NULL;
    char** str=NULL;
    int z=0;
    words = (char**)malloc(sizeof(char)); 
    words[x] = (char*)malloc(sizeof(char));
    my_array(words,str,tmp);
    for (z=0;z<x+1;z++){
        printf("%s ",words[z]);
    }
}

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