Как реализовать динамические массивы в C?

Я пишу этот код, используя динамическое выделение памяти, для записей учеников, как указано, этот код кажется простым, я, очевидно, правильно размещаю элементы в их правильных местах, но когда дело доходит до их печати, это дает мне "core dumped"ошибка! что не так?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
    char **firstname;
    char **lastname;
    float *score;
    int number_of_records,i,j,ctr=1,row=15,col=20;
    /*ctr is to keep track of the student's number (makes it easier to
      the user), it starts with (1)*/

    firstname=malloc(row*sizeof(char*));
    for(i=0;i<row;i++)
    {
        firstname[i]=malloc((col+1)*sizeof(char));
    }
     lastname=malloc(row*sizeof(char*));
    for(i=0;i<row;i++)
    {
        lastname[i]=malloc((col+1)*sizeof(char));
    }
    printf("\nPlease indicate number of records you want to enter (min 2, max 15): ");
    scanf("%d",&number_of_records);
    score=malloc(row*sizeof(float));

    printf("\nPlease input records of students\n(enter a new line after"
           "each record), with following format:\nfirst name last name score ");
    for (i=0;i<number_of_records;i++)
    {
        printf("\nEnter record for student %d : ",ctr);
        scanf("%s %s %f",firstname[i],lastname[i],score[i]);

        ctr++; /*ctr is to keep track of student number
                 (makes it easy to the user) */

    }
     for (i=0;i<number_of_records;i++)
    {

        printf("%s %s %f\n",firstname[i],lastname[i],score[i]);
    }
}

1 ответ

Решение

Пожалуйста, измените это:

for (i=0;i<number_of_records;i++)
    {
        printf("\nEnter record for student %d : ",ctr);
        scanf("%s %s %f",&firstname[i],&lastname[i],&score[i]);

        ctr++; /*ctr is to keep track of student number (makes it easy to the       user) */
    }

к этому

for (i=0;i<number_of_records;i++)
    {
        printf("\nEnter record for student %d : ",ctr);
        scanf("%s %s %f",firstname[i],lastname[i],&score[i]);

        ctr++; /*ctr is to keep track of student number (makes it easy to the       user) */
    }

И это будет работать. Причина в том, что firstname[i] а также lastname[i] уже pointers; вам не нужно использовать & оператор для них.

PS Кроме того, поскольку вы используете C, не приводите возвращаемые значения из malloc или же realloc, Это будет сделано автоматически.

Другие вопросы по тегам