Этот код должен сохранять друзей в каком-либо массиве массива (указатель на указатель) и по длине имен делать realloc (строить точно динамическое место для строк каждого из них), а также печатает строку и длину и освобождает все. Итак, код работает, когда я отлаживаю, но когда я запускаю его с CTR + f5, он разбивается после fgets первой строки. также все свободные циклы и бесплатная функция не работают здесь, но если удалить ее, то отладка все еще работает, а CTR + f5 все равно не работает. Помогите кому-нибудь?Работа кода при отладке, но при запуске кода сбой
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 20
int main(void)
{
int i = 0, j = 0,friends=0;
char str[LENGTH];
printf("Hello bro,how U doin'?\nTell me how many friends do you have?\n");
scanf("%d",&friends);
char** friendBook = (char**)malloc(sizeof(char)*friends);
if (friendBook)
{
getchar();
for (i = 0; i < friends; i++)
{
*(friendBook+ i) = malloc(LENGTH*sizeof(char));
}
for (i = 0; i < friends; i++)
{
printf("Enter friend number: %d\n", i + 1);
fgets(str, LENGTH, stdin);
str[strcspn(str, "\n")] = 0;
*(friendBook + i) = (char*)realloc(*(friendBook+i),(sizeof(char)*strlen(str))); // dynamic memory for every string(name)
if (*(friendBook + i))
{
strcpy(*(friendBook+i),str);
}
}
for (i = 0; i < friends; i++)
{
printf("Friend: %s\tLength of friend name %d\n", *(friendBook + i), strlen(*(friendBook + i)));
}
}
for (i = 0; i <friends; i++)
{
free(*(friendBook+i));
}
free(friendBook);
system("PAUSE");
return 0;
}
Почему * (friendBook + i), а не friendBook [i]? – gnasher729
'char ** friendBook = (char **) malloc (sizeof (char) * friends);' -> 'char ** friendBook = (char **) malloc (sizeof (char *) * friends);' – BLUEPIXY
@BLUEPIXY спасибо! теперь это работа! – blackFish