Я пытаюсь динамически выделять массив структур, но всякий раз, когда я запускаю программу, я продолжаю получать: a.out (6487,0x7fff7ecb8300) malloc: * ошибка для объекта 0x7fff6f670000: указатель realloc ' д не был выделен * установить контрольную точку в malloc_error_break для отладкиПерераспределение указателя не было выделено
struct node {
char course[25];
char category[20];
char prereq[50];
char notes[50];
};
int main(int argc, char* argv[])
{
FILE *fp;
char *filename = argv[1];
char *token;
char buffer[100];
char *del = ",\n";
int num = 5, i = 0, j =0, count = 0;
struct node *d = malloc(num * sizeof(struct node));
char** complete = malloc(num * sizeof(char*));
printf("%s\n", filename);
if((fp = fopen(filename, "r")) == NULL)
{
printf("unable to open %s\n", filename);
exit(1);
}
while(fgets(buffer, sizeof(buffer), fp) != NULL)
{
if(count == num)
{
num = num + 5;
struct node *d = realloc(d, sizeof(d)*num);
printf("Reallocating\n");
}
token = strtok(buffer, del);
if(strncmp(token, "#", 1) != 0)
{
strcpy(d[count].course, token);
printf("%s\n", d[count].course);
strcpy(d[count].category, strtok(NULL, del));
printf("%s\n", d[count].category);
strcpy(d[count].prereq, strtok(NULL, del));
printf("%s\n", d[count].prereq);
strcpy(d[count].notes, strtok(NULL, del));
printf("%s\n", d[count].notes);
count++;
}
}
перед использованием 'argv [1]', проверьте, является ли 'argc == 2'. просто предложение. –
Предупреждение: при вызове 'sizeof' в' malloc' (и тому подобное) [вы всегда должны его писать] (http://stackoverflow.com/a/17258659/1151654) как 'ptr = malloc (sizeof (* ptr) * ...); 'вместо' ptr = malloc (sizeof (ptrtype *) * ...); '. – Eregrith
И, таким образом, 'struct node * d = realloc (d, sizeof (d) * num);' неверно: это должно использовать 'sizeof (* b)', а не 'sizeof (b)' – Eregrith