продолжайте терпеть крах после 2-й печати массива указателей в C

В следующем коде я продолжаю терпеть крах после последнего для петли. Я не могу выяснить, отладив с Netbeans.. Для работ петли и печатей, что я хочу быть напечатанным, но тогда катастрофы программы вместо succesfull завершения. Не могли бы Вы помочь (я знаю о, добирается, я скоро попробую fgets)??

Кодекс:

#include
#include
#include


int main()
{
    char *str,**string,buffer[50],temp[2];
    int i,j,size,counter;
    size=1;

    string=(char**) calloc(size,sizeof(char*));
    for (i=0; i<=counter; i++) printf("\n%s",string[i]);
    return 0;
}
0
nl ja de
почему действительно работают временно [0] = 120 вместо временного секретаря [0] = ' x'?
добавлено автор Triton Man, источник
вы никогда не инициализируете прилавок
добавлено автор Ivaylo Strandjev, источник
Как примечание стороны, добирается </ код> был удален из языка C начиная с C11.
добавлено автор Lundin, источник
Относительно вопроса, это - хорошая ссылка поскольку, как на самом деле ассигновать 2D множества. Кодекс в этом вопросе не ассигнует 2D множество, это ассигнует феерию фрагментации кучи.
добавлено автор Lundin, источник
К вашему сведению: не используйте , получает , при любых обстоятельствах! Используйте fgets вместо этого, чтобы избежать переполнения буфера.
добавлено автор Oliver Charlesworth, источник
К вашему сведению: Don' t забывают свободный вся ассигнованная память когда you' ре сделано с ним.
добавлено автор Oliver Charlesworth, источник
перекручивание trye я <�противостою вместо меня <= прилавку.
добавлено автор dmaij, источник

2 ответы

counter is not initiated to 0 before the while loop

И используйте

string=realloc(string,size*sizeof(char*));

вместо

string=realloc(string,size*sizeof(char**));

Могли вы описывать подробно, что вы намереваетесь сделать, потому что в вашем коде вы ассигнуете множество указателей, и затем вы ассигнуете память для каждого указателя во множестве, и затем вы удаляете почти множества с realloc (последовательность, 2*sizeof (случайная работа **)); это будет удалять почти множество и держать только первые 2 указателя. таким образом с этим вы освобождаете указатели на ассигнованную память, таким образом, вы не могли больше освобождать их:

1
добавлено
пожалуйста
добавлено автор MOHAMED, источник
  1. Counter should be set to zero before the while cycle. It is not set to zero by default.

  2. The cycle in the for look should exclude counter:

    for(i=0; i

  3. Free all dynamically allocated memory by calling free.

0
добавлено