Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem z alokacją

Ostatnio zmodyfikowano 2014-07-30 20:30
Autor Wiadomość
stevy
Temat założony przez niniejszego użytkownika
problem z alokacją
» 2014-07-30 18:56:58
Witam, mam problem z alokacją a właściwie z ciągłym wysypywaniem się po kompilacji.
Program pobiera z pliku 2 liczby i ma stworzyć tablicę dynamiczną po jego otwarciu i odczytaniu ich, a za nic nie chce tego zrobić.

C/C++
#include<stdio.h>
#include<stdlib.h>

char ** tab;

void funkcja( void );

int main()
{
   
    FILE * f;
   
    /**********************************/
   
    f = fopen( "tekst.txt", "w" );
   
    fprintf( f, "5 10\n" );
   
    fclose( f );
   
    /******************************/
   
    funkcja();
   
   
   
    free( tab );
    return 0;
}

///////////////////////////////////////////////////////////

void funkcja()
{
    int i = 0, j = 0;
    int ile_znakow = 0;
    int ile_linii = 0;
    FILE * plik;
   
   
   
   
    plik = fopen( "tekst.txt", "r" );
   
    if( plik != NULL )
    {
       
        fscanf( plik, "%d", & ile_znakow );
        fscanf( plik, "%d", & ile_linii );
       
        printf( "%d %d\n", ile_znakow, ile_linii );
       
        /******************************************************/
       
        tab =( char ** ) malloc( ile_znakow * sizeof( char ) );
       
        for( i = 0; i <= ile_linii; i++ )
             tab[ i ] =( char * ) malloc( ile_linii * sizeof( char ) );
       
       
       
        fclose( plik );
       
    }
   
}



po odpaleniu wywala ten fragment ze strzałką zaznaczającą return:

C/C++
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
const void * pUserData
)
{
    if( !pUserData )
         return FALSE;
   
    if( !_CrtIsValidPointer( pHdr( pUserData ), sizeof( _CrtMemBlockHeader ), FALSE ) )
         return FALSE;
   
    return HeapValidate( _crtheap, 0, pHdr( pUserData ) );
}

i nie mam bladego pojęcia o co może chodzić...
P-114679
pekfos
» 2014-07-30 19:47:21
C/C++
tab =( char ** ) malloc( ile_znakow * sizeof( char ) );
Alokujesz wskaźniki, a nie znaki. Zły rozmiar.
P-114685
stevy
Temat założony przez niniejszego użytkownika
» 2014-07-30 20:21:44
chodzi o poprawienie sizeof(char) na sizeof(char*)? bo jeśli tak, to mimo tego dalej nie działa...
P-114690
Monika90
» 2014-07-30 20:24:21
tu masz ile_znakow
tab =( char ** ) malloc( ile_znakow * sizeof( char ) );

a tu masz ile_linii
for( i = 0; i <= ile_linii; i++ )

to nie pasuje
P-114691
stevy
Temat założony przez niniejszego użytkownika
» 2014-07-30 20:27:35
Dziekuje bardzo, działa:) do zamknięcia
P-114692
1aam2am1
» 2014-07-30 20:30:06
Chodzi oto że powinieneś stworzyć tablice tablic.
C/C++
char ** tab

tab = new int *[ rozmiar tablicy ] //x

tab[ 0 ] = new int[ rozmiar tablicy ] //y


tab[ x ][ y ] = 5; //posługiwanie się tablicą

[ cpp ]
P-114693
« 1 »
  Strona 1 z 1