\0 termination

Status
Niet open voor verdere reacties.

albertzwaagstra

Nieuwe gebruiker
Lid geworden
28 apr 2011
Berichten
3
Ik weet niets van c++
Ben al geruime tijd aan het experimenteren.
En het lukt me redelijk.
Maar nu heb ik iets wat ik niet begrijp.

memmove( szSource + iExtraCharsForPrefix, szSource, sizeof( TCHAR ) * (iCharsToMove) );
Dit regeltje doet mijn programma af en toe crashen.
En alleen als ik de release exe opstart.
Alle andere gevalen werkt prima.
Als ik iCharsToMove -1 doe werkt het prima behalve dat ik mijn 0 termintion mis.
Ook als ik later o termination doe crasht het programma.
de szSource heeft genoeg geheugen ruimte.
Heb het ook met memcpy geprobeert meer zelfde probleem.
Er zijn ook omstandigheden dat het wel werkt maar zie geen relatie.

Wie kan me hier wat over vertellen

THX Albert.
 
Hoe vul je je stringarray?

Dit voorbeeld gaat namelijk wel goed:

int _tmain(int argc, _TCHAR* argv[])
{
char text[255];
char dest[255];

sprintf(text,"test");
memmove(&dest,&text,sizeof(text));
return 0;
}

sprintf zorgt automatisch dat de string wordt afgesloten met een '\0' char.
 
Dit is eigenlijk C, en niet C++. Misschien moet je is kijken naar de string class van de standaardbibliotheek bij C++.
 
int length= _tcslen(szFilename)+100 ;
TCHAR * szSource = new TCHAR[ length ];
szSource = szFilename + iBackslashLast + 1;

//TCHAR * szSource = szFilename + iBackslashLast + 1;
if( iLevelDiff > 0 )
{
const int iExtraCharsForPrefix = ( 3 * iLevelDiff ) - iBackslashLast - 1;
const int iCharsToMove = iFilenameLen - iBackslashLast; // One more for '\0'
memmove( szSource + iExtraCharsForPrefix, szSource, sizeof( TCHAR ) * iCharsToMove );

TCHAR * szWalk = szFilename;
while( iLevelDiff-- )
{
memcpy( szWalk, TEXT( "..\\" ), 3 * sizeof( TCHAR ) );
szWalk += 3;
}
}

Dit is de code de szFilename is waar het omgaat.
bij memove gaat het fout.
Ik heb de lengte van szSource veranderd zie bovenste drie regels.
Nu gaat het af en toe goed.

Ik heb nog steeds geen idee.

Bedankt voor je replay
 
gevonden

Heb het toch weer gevonden.

Met pointers is er een groot gevaar

PCHR * test = test1

Bijde pointers hebben het zelfde adres en de zelfde lengte.
Dit was in mijn geval ook je roep een roetine aan met variable deze was dus ergens gedefinieerd.
Geheel over het hoofd gezien.

Kan weer verder experimentern
THX iedereen
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan