двумерный массив си при помощи malloca
пытаюсь реализовать код который во время того как пользователь вводит символ программа выделяет динамический двумерный массив и добавляет туда этот символ. моя программа работает не на всех наборах слов. если ввести слишком длинную строку, программа делает пустой вывод. вот мой код:
#include<stdio.h>
#include<stdlib.h>
int main() {
char** words=NULL;
char* tmp=NULL;
char c=0;
int x=0,len=0,z=0;
words = (char**)malloc(20*sizeof(char*));
words[x] = (char*)malloc(sizeof(char));
while ((c = getchar()) != '\n') {
if (c!=' '){
tmp = (char*)realloc(words[x],sizeof(char));
words[x]=tmp;
words[x][len]=c;
len++;
}
else{
words[x][len] = '\0';
x++;
words[x] = (char*)malloc(sizeof(char));
len=0;
}
}
words[x][len] = '\0';
for (z=0;z<x+1;z++){
printf("%s",words[z]);
}
free(words);
words = NULL;
free(tmp);
tmp = NULL;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
realloc(words[x],sizeof(char)) — как был у вас выделен 1 (прописью: один) байт, так и остается один...
realloc не добавляет указанное количество памяти, а выделяет его.
И, кстати, вы не проверяете, что именно возвращают ваши функции выделения памяти.