Avatar billede bumle90 Nybegynder
20. januar 2004 - 17:57 Der er 13 kommentarer og
1 løsning

underligt problem med hukommelse

Når jeg fyrer følgende program af får jeg sjovt nok strenge jeg har lagt op i hukommelsen tidligere i et andet program med som en del af ini eller datafil.
Deter som om jeg ikke får renset hukommelsen eller sådan noget.
Gør jeg etellerandet helt galt her?

#include <stdio.h>
#include <windows.h>
#include <string.h>

char inifil[]={0};
char datafil[]={0};

void GetExePath(char* exepath)
{
    TCHAR szEXEPathname[_MAX_PATH];
    GetModuleFileName(NULL, szEXEPathname, _MAX_PATH);
    strcpy(exepath,szEXEPathname);   
}

int main()
{
    char path[_MAX_PATH];
    GetExePath(path);

    strcat(inifil,path);//Dynamisk opbygning af sti til datafil
    strcat(inifil,"scanner.ini");//Dynamisk opbygning af sti til datafil   
    strcat(datafil,"path");//Dynamisk opbygning af sti til datafil
    strcat(datafil,"comp.usr");//Dynamisk opbygning af sti til datafil

    printf("%s\n\n%s\n",nr1,nr2);
return 0;
}
Avatar billede bumle90 Nybegynder
20. januar 2004 - 17:58 #1
Hov skulle sæføli være
    printf("%s\n\n%s\n",inifil,datafil);
til sidst
Avatar billede stigc Nybegynder
20. januar 2004 - 18:02 #2
Hvor gør du plads til inifil og datafil?
Avatar billede stigc Nybegynder
20. januar 2004 - 18:02 #3
De kan jo kun indeholde 1 char.
Avatar billede arne_v Ekspert
20. januar 2004 - 18:02 #4
Prøv:

char inifil[256]={0};
char datafil[256]={0};
Avatar billede jpk Nybegynder
20. januar 2004 - 18:02 #5
Der er ikke afsat noget hukommelse til inifil og datafil!!!
Avatar billede arne_v Ekspert
20. januar 2004 - 18:05 #6
Nu kom stig jo før mig, så jeg rettede lige et par andre ting:

#include <stdio.h>
#include <windows.h>
#include <string.h>

char inifil[_MAX_PATH]={0};
char datafil[_MAX_PATH]={0};

void GetExePath(char* exepath)
{
    TCHAR szEXEPathname[_MAX_PATH];
    GetModuleFileName(NULL, szEXEPathname, _MAX_PATH);
    strcpy(exepath,szEXEPathname);   
}

int main()
{
    char path[_MAX_PATH],*p;
    GetExePath(path);
    p = path + strlen(path);
    while(*p != '\\') p--;
    p++;
    *p = '\0';
    strcat(inifil,path);
    strcat(inifil,"scanner.ini");
    strcat(datafil,path);
    strcat(datafil,"comp.usr");
    printf("%s\n\n%s\n",inifil,datafil);
    return 0;
}
Avatar billede bumle90 Nybegynder
20. januar 2004 - 18:12 #7
hmm ja oki...Dum fejl..Glemmer lige at tænke mig om af og til :)
Arne...jeg havde lavet sådan en funktion til at fjerne \\ i forvejen....og stig var jo først med svaret...Så jeg synes det må være mest fair hvis han får pointene...ok?
Avatar billede stigc Nybegynder
20. januar 2004 - 18:16 #8
Jeg samler ikke på point. :)

I steder for buffer med en fixed størrelse (som vi jo før har set kan give problemer :)) så kan du også arbejder således:

int len = strlen(path) + strlen("scanner.ini");
char* newString= new char[len+1];  //1 pga.  \0
Avatar billede coldplay Nybegynder
21. januar 2004 - 13:48 #9
Er du ikke interesseret i at få dine 15 point tilbage?

Svar på "15 point til bumle90", så sender jeg dine 15 point tilbage.

Trust me :-D

P.S. Jeg synes det er bedre, at dem som gerne vil have point også får dem...
Avatar billede coldplay Nybegynder
21. januar 2004 - 14:00 #10
Det kunne være, at jeg skulle sende et svar...
Avatar billede jpk Nybegynder
21. januar 2004 - 14:02 #11
bumle90 >> Du skal IKKE acceptere coldplay's svar!

Læg derimod selv et svar og acceptér det...
Avatar billede coldplay Nybegynder
21. januar 2004 - 14:05 #12
Hej jpk,

bumle90 får sine point...

Jeg var bare ikke klar over, at man kunne gå den vej, som du beskriver.
Avatar billede bumle90 Nybegynder
21. januar 2004 - 18:32 #13
Jeg nupper bare pointene her igen :)
Avatar billede coldplay Nybegynder
22. januar 2004 - 13:37 #14
Fint, det virker som jpk beskrev.

For god orden skyld:

Jeg havde ikke til hensigt at snyde.

Fortsat god dag :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis