Na veel gedebugged te hebben kom ik hier nog steeds niet uit.. Alles lijkt gewoon te kloppen, argument count, de pointer naar het format klopt, ik weet het even niet meer..
Compiler = VC++ 6
Het gaat om dit stukje code:
Die replies_ arrays zijn als volgt opgesteld:
SendNumeric() wordt op deze manier gecalled:
Ik dacht eerst dat het ergens in numeric_str() zat, maar na een printf( "%s", numeric_str( numeric ) ); toegevoegt te hebben krijg ik wel gewoon alles normaal terug op de console.
Iemand enig idee waarom die access violation optreedt en hoe ik dat kan verhelpen? Alvast bedankt
Compiler = VC++ 6
Het gaat om dit stukje code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| void CClient::SendNumeric( int numeric, ... ) { char szTemp[MAX_BUFFERSIZE]; char * text = numeric_str( numeric ); va_list vargs; va_start( vargs, text ); if ( ! vsprintf( szTemp, text, vargs ) ) /* Hier treedt de access violation dus op */ strcpy( szTemp, text ); SendData( ":%s %d %s %s", gConfig.m_servername, numeric, registered ? m_nickname : "AUTH", szTemp ); va_end( vargs ); } char * numeric_str( int numeric ) { char * tmp; if ( ( numeric < 100 ) && ( numeric >= 0 ) ) tmp = replies_0[numeric].num_form; else if ( ( numeric < 300 ) && ( numeric >= 200 ) ) tmp = replies_2[numeric - 200].num_form; else if ( ( numeric < 400 ) && ( numeric >= 300 ) ) tmp = replies_3[numeric - 300].num_form; else if ( ( numeric < 500 ) && ( numeric >= 400 ) ) tmp = replies_4[numeric - 400].num_form; else if ( ( numeric < 600 ) && ( numeric >= 500 ) ) tmp = replies_5[numeric - 500].num_form; else if ( ( numeric < 700 ) && ( numeric >= 600 ) ) tmp = replies_6[numeric - 600].num_form; return tmp; } |
Die replies_ arrays zijn als volgt opgesteld:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| typedef struct { int num_val; char *num_form; } SNumeric; static SNumeric replies_0[] = { 0, (char *)NULL, /* 001 */ RPL_WELCOME, ":Welcome to the %s IRC Network %s!%s@%s", /* 002 */ RPL_YOURHOST, ":Your host is %s, running version %s", /* 003 */ RPL_CREATED, ":This server was created %s", /* 004 */ RPL_MYINFO, "%s %s " IRCD_USERMODES " " IRCD_CHANMODES, /* 005 */ RPL_PROTOCTL, "%s :are available on this server", 0, (char *)NULL }; |
SendNumeric() wordt op deze manier gecalled:
C++:
1
| SendNumeric( RPL_WELCOME, gConfig.m_network, m_nickname, m_username, m_maskedhost ); |
Ik dacht eerst dat het ergens in numeric_str() zat, maar na een printf( "%s", numeric_str( numeric ) ); toegevoegt te hebben krijg ik wel gewoon alles normaal terug op de console.
Iemand enig idee waarom die access violation optreedt en hoe ik dat kan verhelpen? Alvast bedankt