-
Fototrend
Új hozzászólás Aktív témák
-
OddMan
őstag
Van egy C++-os OOP-s kérdésem.
Van egy olyan problémám, hogy dinamikusan foglalok memóriát a new-val és amikor a delete-el fel akarom szabadítani, akkor kivételt kapok. Program futtatása alatt semmi gond nincsen, csak amikor ki akarok lépni, akkor meghívódik a destruktor és jön is a csúnya felkiáltójeles ablak. Mit rontottam el?
A forrás egy részét bemásolom alulra. Előre is köszi a segítséget.
class osztaly
{
private:
typedef struct
{
int flag;
float vec3[3];
float vec2[2];
int bone;
}model_vertex_t;
model_vertex_t *mv_ptr;
public:
osztaly(void);
~osztaly(void);
void fg(void);
}
osztaly::~osztaly(void)
{
//mem felszabadítás
delete[] mv_ptr; //ITT KIVÉTEL KELETKEZIK! MIÉRT?????
}
void osztaly::fg(void)
{
//100 elemű model_veretex_t típusú tömb foglalása
mv_ptr = new model_vertex_t[100];
}
[Szerkesztve]''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
Közben rájöttem, hogy mi a hiba, de az a bemásolt kódból nem derül ki.
A probléma az, hogy a destruktor kétszer hívódik meg, így a delete a második lefutásakor kivételt dob. Talán úgy lehet ezt megszüntetni, hogy NULL-ra állítom az első törlés (delete) után a mutató értékét és egy if-el ellenőrzöm, ha nulla, akkor már nem futtatom le a delete-et még egyszer.
[Szerkesztve]''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
Igen ez így van, jól lehet látni a visualc++ debuggerében.
MÁS:
Egy kis elmélkedés: létszi javítsatok, ha valahol hülyeséget írtam.
Csak azt akarom megtudni, hogy jól értem-e a struktúrákat.
//Ez csak egy deklaráció
struct elso_s
{
int i, j;
};
//ez már definíció
struct elso_s elso;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct masodik_s
{
int i, j;
}masodik; //itt már definiáljuk is, tehát létre is hozzuk a struktúrát.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//csak egy új típust hoz létre
typedef struct harmadik_s
{
int i, j;
}harmadik; //ez csak egy típus, még nincsen változónk
harmadik harmadik_v; //itt hozzuk létre a változót
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct //miben különbözik ez ez egyel fentebbitől?
{
int i, j;
}negyedik; //ez is csak egy új típus
negyedik negyedik_v[20]; //itt hozunk létre egy negyedik típusú 20 elemű tömböt.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Aztán még mutatókkal is végig lehetne játszani a dolgokat.
[Szerkesztve]''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
Néha egy osztályon belül használok struktúrát is. Használhatnék osztályt is, amit ilyenkor beágyazott osztálynak hívnánk, de szerintem a struktúra ilyen esetben egyszerűbb, hacsak nem akarunk metódusokat is írni bele. Szal lehet, hogy egy picit rosszul fogalmaztam fentebb.
Egyébként én sehol nem említettem az OOP-t, csak a sima c-ben használt struktúráról volt szó.
[Szerkesztve]''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
Hogyan lehet a CPU Usage (cpu foglaltság) értékét lekérdezni C++-ban?
Eddig a GetSystemTimes függvénnyel próbálkoztam, de nem igazán kapok jó eredményt.''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
No most már jól működik. Nem a legszebb, de ahhoz elég, hogy lássam a 2x16-os LCD kijelzőmön a proci kihasználtságot.
//*****************************************************************************
// Get CPU Usage
//*****************************************************************************
void Monitor::GetCPUUsage(void)
{
union
{
DWORD64 part64;
FILETIME ft;
}idleTime;
union
{
DWORD64 part64;
FILETIME ft;
}idleTimelast;
union
{
DWORD64 part64;
FILETIME ft;
}kernelTime;
union
{
DWORD64 part64;
FILETIME ft;
}kernelTimelast;
union
{
DWORD64 part64;
FILETIME ft;
}userTime;
union
{
DWORD64 part64;
FILETIME ft;
}userTimelast;
DWORD64 systime;
GetSystemTimes(&idleTimelast.ft, &kernelTimelast.ft, &userTimelast.ft);
Sleep(TIMEOUT); // 1 sec-et várunk
GetSystemTimes(&idleTime.ft, &kernelTime.ft, &userTime.ft);
/* little calc */
idleTime.part64 -= idleTimelast.part64;
kernelTime.part64 -= kernelTimelast.part64;
userTime.part64 -= userTimelast.part64;
systime = kernelTime.part64 + userTime.part64;
cpuusage = (USHORT)((systime - idleTime.part64) / (systime / 100));
}
Csak XP SP1 és 2003 Server alatt müxik.
[Szerkesztve]''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
directx (hu) oldal
Bővebben: link
pdf:
Bővebben: link''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
DirectDraw programozás!
Bővebben: link''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
Szerintem is a VC++6.0-t vagy a .NET-es verziót kellene használnod. A gcc egy nagyon jó fordító, de mivel nincsen hozzá egy tisztességes GUI felület (pl. DevC++), így rengeteg idő elmegy vacakolással. Miracle-nek igaza van, abban is meg lehet írni mindent, de egy VC-ben sokkal kevesebb szenvedéssel is célba lehet érni. Egyébként nekem azért tetszik jobban a MS VisualC++ , mert a Microsoft egy nagyon barátságos és sokat tudó debugger-t pakolt a fejlesztői környezetbe.
''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
#include <conio.h>
int main()
{
// TODO: Please replace the sample code below with your own.
for (int i=0; i<5; ++i)
{
printf(''i: %d\n'', i);
}
getch();
printf(''i: %d\n'', i);
return 0;
}
kimenet:
-------------
i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
Ezek szerint tényleg nem csak a for blokkon belül érvényes az i változó.
VC++ 2003 .NET-ben ferdítve.
Eddig ezt észre sem vettem.
[Szerkesztve]''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
Hogyan lehet azt leprogramozni windows-ban, hogy amikor kisméretre állítom a progimat, akkor az óra mellé kerüljön a többi kis ikon mellé.
''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
Ne értsetek félre, én is C párti vagyok, de azért azt ne felejtsük el, hogy Pascal/Delphi-ben is lehet nagyon komoly programokat írni, pl.: az Imperium Galactica is Turbo Pascal 7.0-val készült, és a 16bit-es védett módot is kihasználta.''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
#758-ra valaki?
''A szíved szabad! Légy bátor és kövesd!''
-
OddMan
őstag
Linux scriptek írásának megtanulásához egy jó magyar nyelvű könyv: Bővebben: link
''A szíved szabad! Légy bátor és kövesd!''
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- iPhone topik
- Skoda, VW, Audi, Seat topik
- Kerékpárosok, bringások ide!
- Samsung Galaxy Watch4 és Watch4 Classic - próbawearzió
- Rendkívül ütőképesnek tűnik az újragondolt Apple tv
- Eredeti játékok OFF topik
- Milyen processzort vegyek?
- MIUI / HyperOS topik
- Otthonfelújítási program (2024.)
- További aktív témák...