problem z alokacją
Ostatnio zmodyfikowano 2014-07-30 20:30
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ć. #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: 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ć... |
|
pekfos |
» 2014-07-30 19:47:21 tab =( char ** ) malloc( ile_znakow * sizeof( char ) );
|
Alokujesz wskaźniki, a nie znaki. Zły rozmiar. |
|
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... |
|
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 |
|
stevy Temat założony przez niniejszego użytkownika |
» 2014-07-30 20:27:35 Dziekuje bardzo, działa:) do zamknięcia |
|
1aam2am1 |
» 2014-07-30 20:30:06 Chodzi oto że powinieneś stworzyć tablice tablic. char ** tab
tab = new int *[ rozmiar tablicy ]
tab[ 0 ] = new int[ rozmiar tablicy ]
tab[ x ][ y ] = 5;
[ cpp ] |
|
« 1 » |