[c] Dynamiczna alokacja pamięci, przypisywanie wartości

0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student
{
    int nralb;
    char imie[ 999 ];
};
int main()
{
    char * k;
    int i, n, j, p;
    start:
    printf( "%s", "ilu? " );
    scanf( "%d", & n );
    if( n > 0 && n < 100 )
    { struct Student * ptr;
        ptr = calloc( n, sizeof( struct Student ) );
        for( j = 0; j < n; j++ )
        {
            printf( "%s", "Imie? " );
            scanf( "%s", k );
            strcpy( ptr[ j ].imie, k );
            printf( "%s", "Numer? " );
            scanf( "%d", & p );
            ptr[ j ].nralb = p;
        }
        for( i = 0; i < n; i++ )
        {
            printf( "Imie: %s\n", ptr[ i ].imie );
            printf( "Numer albumu: %d\n", ptr[ i ].nralb );
        }
    }
    else
    {
        printf( "%s", "nieprawidoa liczba\n" );
        goto start;
    }
    return 0;
}

Program kompiluje się i działa do momentu podania imienia, zaraz potem wyskakuje "program przestał działać". Problem w tym, że ponieważ kompiluje się bez problemu, to nie mam pojęcia co jest z tą zmienną "p" nie tak.

2

Nigdzie nie alokujesz k.

btw: pętla goto? wtf?

0

Domyślam się że calloc(k) nie wystarczy, mógłbyś proszę rozwinąć?
A i jest jakiś problem z goto?

4

Calloc wystarczy.

O goto można książki pisać. Generalnie łatwo o pomyłkę i jeśli jest to możliwe to należy korzystać z bardziej wysokopoziomowych konstruktów - takich jak np. pętle.

3

do tego co napisał @kq należy dodać, że pamięc alokujesz, ale nie zwalniasz....

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0