Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- eBay-es kütyük kis pénzért
- Meggyi001: Kórházi ellátás: kuka vagy finom?
- GoodSpeed: Ágymatrac keresési kálvária
- sziku69: Szólánc.
- sh4d0w: Kalózkodás. Kalózkodás?
- Lalikiraly: Kaáli Autó-Motor Múzeum
- gban: Ingyen kellene, de tegnapra
- Brogyi: CTEK akkumulátor töltő és másolatai
Új hozzászólás Aktív témák
-
kmisi99
addikt
válasz
h1ght3chzor
#2471
üzenetére
Azóta tettem egy próbát a code blocks al máshonnan töltöttem le egy másik verziót ez már tökéletesen futtat, de kössz az ajánlást.
-
Dave-11
tag
válasz
h1ght3chzor
#2369
üzenetére
Van persze, csak az a gond azokkal hogy mindig más nyelven van. Legtöbbször Pascal, még előfordul a C++ is, de van néhány Delphis is. Meg volt amit most csináltam feladatot, és nem volt jó a megoldás egy része

Szóval vannak ilyenek, de alapjába véve jók a megoldások. -
BTminishop
aktív tag
válasz
h1ght3chzor
#2356
üzenetére
Kösz szépen

-
chabeee
aktív tag
válasz
h1ght3chzor
#2326
üzenetére
igen, nem értem miért.
-
chabeee
aktív tag
válasz
h1ght3chzor
#2322
üzenetére
nem a tomb2 szamlalo2 méretű és az idx-edik elemet akarom törölni.
tehát azt csináltam az elsőnél hogy elmentem idx-ig ott belerakosgattam az elemeket a temp-be, utána idx+1-től mentem és a temp[i-1]-be raktam bele tehát akkor ott folytatja ahol abbahagyta az előtte lévő ciklusnál.
szerk.: valószínűleg az lesz a hiba hogy a tomb2-t nem foglalom újra. meglesem. -
chabeee
aktív tag
válasz
h1ght3chzor
#2320
üzenetére
hát elvileg ez jó,
tomb2 tartalmát törli és mivel ő egy pointer ráállítom a temp-re ami ugyanúgy egy többre mutat. -
Chipi333
csendes tag
válasz
h1ght3chzor
#1570
üzenetére
Szerintem a pointer és a tömb fogalmát nem érdemes összemosni, mert két teljesen különböző dologról van szó. Az, hogy egy tömböt általában úgy szokás használni, hogy egy pointerrel mutatsz az elejére nem jelenti azt, hogy minden pointer mögött tömb lesz.
-
ArchElf
addikt
válasz
h1ght3chzor
#1545
üzenetére
Szerintem még lehet memóriaszivárgás, mert az itt generált elemeket:
this->temp = new Project [pm+1];
nem szabadítod fel, hanem egyszerűen a hivatkozáést felülcsapod ezzel:
for(i=0;i<pm;++i){ this->temp[i]=tomb[i];}
Ezen elméláztam este, de nem tudtam működő megoldást találni elemszintű cserére. Nem vagyok sajna c++ terén ennyire jártas...Ja és még egy probléma: ha referencia alapján tárolod le (nem másolod), akkor a kód mindig (fizikailag) ugyanazt a változót teszi be a memóriába:
if(menu=='1'){
system("CLS");
char projektnev[200];
int projektmeret;
cout << "Adja meg a projekt nevet: ";
cin >> projektnev;
cout << endl;
cout << "Adja meg a projekt memoriameretet: ";
cin >> projektmeret;
if(projektmeret<=0){
cout << endl;
cout <<"Hibas memoriameretet adott meg!"<< endl;;
cout << "Adja meg a projekt memoriameretet: ";
cin >> projektmeret;
}
b.psetname(projektnev);
b.setmeret(projektmeret);
a.phozzaad(b);
}Így tényleg a legjobbnak tűnik egy a másoló operátort felülírni (operator=) és nincs több gond...
AE
-
ArchElf
addikt
válasz
h1ght3chzor
#1540
üzenetére
Memóriaszivárgásra csak azt tudom, hogy ha másolod az elemeket, akkor lehet törölni az eredeti tömböt...
copy operator a project-re:
void Project::operator=(Project& p){
this->kezdocim=p.kezdocim;
this->meret=p.meret;
//következő sor esetleg még kellehet
//delete[] this->nev;
this->nev=new char[sizeof(p.nev)];
strcpy(this->nev, p.nev);
}Kicsit tesztelgettem, de úgy néz ki a terület allokálással még gondok vannak.
Nem merültem nagyon bele, de simán kiosztott az első üres helyre két helyet foglaló projectnek területet (és utána azt törölve törölte az utána következőt is):
Memória: 5
A:1 hozzáadása
B:1 hozzáadása
A törlése
C:2 hozzáadása (nem a 3. memóriahelyre teszi, hanem az elsőre)
C törlése (törli a B helyét is)AE
-
h1ght3chzor
őstag
válasz
h1ght3chzor
#1538
üzenetére
Boccs, félreírtam, eltárolja, viszont vmit elnéztem feljebb, mert ha kitörlök egy középső elemet, akkor vmiért 0-s kezdőcímet kap.
Ezt még kidebugolom, viszont a memóriaszivárgás ismét kérdéses. 
-
ArchElf
addikt
válasz
h1ght3chzor
#1538
üzenetére
Nálam működik így:
int pm = getprojektmeret();
Project* temp1 = new Project [pm+1];
int i;
for(i=0;i<pm;++i){
temp1[i]=this->tomb[i];
}
temp1[i]=a;
this->tomb = temp1;
temp1 = 0;AE
-
ArchElf
addikt
válasz
h1ght3chzor
#1536
üzenetére
A delete[] this->tomb; nélkül. Ugyanis ez is kitörli az eredeti elemeket.
AE
-
ArchElf
addikt
válasz
h1ght3chzor
#1524
üzenetére
Amit kiókumláltam (hiányos c++ tudásommal):
Project* temp1 = new Project [getprojektmeret()];
for(int i=0;i<getprojektmeret();++i){
temp1[i]=this->tomb[i];
}
delete[] this->tomb;
this->tomb = new Project[getprojektmeret()+1];
int k=0;
for(k=0;k<getprojektmeret();++k){
this->tomb[k]=temp1[k];
}
this->tomb[k]=a;
delete[] temp1;A második sorban referencia szerint másolod át az osztályokat, így hiába másoltad át, ha a referencia a temp1-ben ugyanoda mutat, mint a tomb-ben.
Miután az 5. sorban delete-tel kitörlöd a tömböt látszólag törlődik a temp1 tömb tartalma is, hiszen a delete igazából nem (csak?) a hivatkozás tömböt törli, hanem a mögötte álló tartalmat is. A következő sorbancsinálsz egy új tömböt az elemeidnek, de azok már valójában törlődtek az előző sorban, hiába másolod át a for ciklusban, már nem lesznek valid elemek (príma érvénytelen hivatkozásokat sikerül így generálnod. A második delete meg valószínűleg azért hal meg, mert már eleve érvénytelen hivatkozások vannak a tömbben.Alapvetően az alábbi lehetőségeid vannak:
- ne töröld az elemeket delete-el (se az elején se a végén), csak nullázd ki a tömbböt, az új elemet add hozzá egyszerűen (lehet, hogy memory leak-et okoz - bár jobban belegondolva taláűn nem is)
- nem kell a sok másolgatós mizéria, csinálj neki egy új tömböt a régit meg dobd el (kb ugyanaz mint az előző, kevesebb másolással), korábban már írtam hogyan
- add át érték szerint az elemeket - kell hozzá egy Project(const Project& p) konstruktor, amivel másolni tudod az elemeket. Bonyolultabb (illetve volatilis) osztályok esetén nem igazán működik, de ha mindenképp szeretnéd használni a delete-et akkor ide jó lesz.AE
-
proci985
MODERÁTOR
válasz
h1ght3chzor
#1524
üzenetére
teljes kód nem kell, pl egy tömb típusa, még az a is elég szvsz.
tipp: szeparáld a tárolóclasst a projecttől, és teszteld pl egy célra létrehozott classal külön. szerintem egyszerűbb lenne, hacsak nem valami minimálprojektről van szó, ahol nem éri meg mindent szétválasztani.
"Egyébként stl tárolót, nem használhatok"
beadandó?
WonderCSabo: jogos, push_back pedig tényleg a legegyszerűbb
.Mindent van értelme dinamikusan kezelni, sokszor jól jöhet (bár nyilván ilyen kicsi feladatnál nem sok értelme van).
persze, de elnézve a kódot volt egy olyan sanda gyanúm, hogy itt valami egyéb követelmény is van a háttérben (tipikus c iskolapéldának tűnt).. -
ArchElf
addikt
válasz
h1ght3chzor
#1510
üzenetére
Én ezt a getprojektmeret() hívást egyszer tenném be egy változóba és az egész eljárás alatt azt a változót használnám (gyorsabb és egyszerűbb is).
Amúgy mit csinál a getprojektmeret() metódus? Megnézi mekkor a tomb mérete?
Mert itt az elözö sorban épp törlöd a tömböd...
//...
delete[] this->tomb;
this->tomb=new Project [this->getprojektmeret()+1];
//...AE
-
Jhonny06
veterán
válasz
h1ght3chzor
#1514
üzenetére
Nekem ez a sor gyanús, szerintem valami indexeléssel kapcsolat hiba lesz:
this->tomb=new Project [this->getprojektmeret()+1];
-
h1ght3chzor
őstag
válasz
h1ght3chzor
#1513
üzenetére
-
proci985
MODERÁTOR
válasz
h1ght3chzor
#1510
üzenetére
(memműveletekben annyira nem vagyok jó)
szerintem itt a getprojectmeret lesz a hunyó, elvileg az a Memory classhoz tartozik, és a projectméret által visszaadott változó nem lesz updatelve az új, egyel nagyobb értékre. magyarul a következő másolásnál elveszik az utolsó eleme a tömbnek..
vagy esetleg fel lehet még hozni a hungrish elnevezéseket, meg az elnevezési konvenciók figyelmen kívül hagyását (getProjectSize / get_project_size), bár valszeg nem azokra gondoltak
-
Jhonny06
veterán
válasz
h1ght3chzor
#1500
üzenetére
Én a CodeToGo-t használtam egy ideig, de nem tud sokat, úgyhogy ne várj csodát. Jobb szerintem nincs.
-
Lavidaloka
aktív tag
válasz
h1ght3chzor
#1461
üzenetére
Igen ...ingyenes.
Már több mint fél éve használtam csak most ez a game frisítés miatt nem megy.

Idézném:PHP Code:
class CWeapon
{
public:
char unknown0[36]; //0x0000
CTemplate* weapon_template; //0x0024
char unknown40[460]; //0x0028
CDeviation* weapon_deviation; //0x01F4
char unknown504[4]; //0x01F8
CBreathingComponent* weapon_breathing; //0x01FC
};//Size=0x0200(512)with this
PHP Code:
class CWeapon
{
public:
char unknown0[36]; //0x0000
CTemplate* weapon_template; //0x0024
char unknown40[460]; //0x0028
CDeviation* weapon_deviation; //0x01F4
char unknown504[260]; //0x02F8
CBreathingComponent* weapon_breathing; //0x02FC
};//Size=0x0200(512) -
ArchElf
addikt
válasz
h1ght3chzor
#1449
üzenetére
Nem könyvből csak gyomorból:
Lefoglalsz egy nagy memóriaterületet és csinálsz egy listát a még szabad területekről.
Foglaláskor végigszaladsz az egész listán és megnézed, hogy mi az a memóriaszegmens, ami a szükségsnél nagyobbak közül a legkisebb. Ennek az elejére kell berakni a foglalást és ennek megfelelően frissíteni a listát.AE
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Huananzhi x99-bd4 (x99 BYD) + E51620v3 + 16GB Kingstone Hyper X ddr4 2133mhz
- Dell Precision 7670 4K+ OLED Touch / i9-12950HX 16C / 32GB D5 / 1TB G4 / A2000 8GB / IR / HU tervező
- Z790 Strix-A, 14700K, 2x16GB 7200 mhz, Tuf 4080, Corsair H1000i
- -ÚJ,2 ÉV GAR- GAMER PC: RYZEN 7 5700/5800X +RX 6600/6700XT +16-64GB DDR4! SZÁMLA! 70 féle ház!
- Üzletből, garanciával, DeLL Inspiron 16 5630 -i5-1340P-16 szál/16RAM/512SSD/16,1"FULLHD IPS
- 154 - Lenovo LOQ (15IRX9) - Intel Core i5-13450HX, RTX 4060
- Telefon felváráslás!! Xiaomi Redmi Note 11, Xiaomi Redmi Note 11 Pro, Xiaomi 11 Lite
- ÚJ HP OmniBook Ultra Flip 14"OLED 2,8 K 120Hz - Ultra 7 256V - 16GB - 1TB - 2,5 év gari - MAGYAR
- Telefon felvásárlás!! Huawei P20 Lite/Huawei P20/Huawei P30 Lite/Huawei P30/Huawei P30 Pro
- BESZÁMÍTÁS! ASUS H510M i3 10105F 16GB DDR4 512GB SSD RTX 2060 Super 8GB Zalman T4 Plus A-data 600W
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő





