Если я правильно угадал, «400000» означает максимальное количество строк, которые может ввести пользователь. Но размер стека по умолчанию в ОС Windows составляет 1 М, sizeof (void *) * 400000 = 1 600 000 ...
Другое дело, что вы не выделили память для каждой строки.
Итак, я пытаюсь исправить ваш код следующим образом:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LINE 4000 // '400000' is really too big!
void init(char* words[]);
int main(int argc,char *argv[]){
char* words[MAX_LINE];
memset(words, 0 , sizeof(words));
init(words);
int i = 0;
do{
printf("%s",words[i]);
delete words[i];
words[i] = nullptr;
i++;
}while(!strcmp(words[i],"-1"));
}
void init(char* words[]){ // initializes array
int maxLen = 1024;
int i = 0;
do{
words[i] = new char[maxLen];
memset(words[i], 0, maxLen);
fgets(words[i], maxLen, stdin);
i++;
}while(!strcmp(words[i],"-1") && i < MAX_LINE);
}