Hirdetés
- Szívós, szép és kitartó az új OnePlus óra
- iPhone topik
- Android alkalmazások - szoftver kibeszélő topik
- Apple Watch Ultra - első nekifutás
- Megkapja a fotós különkiadást a Nubia Z70S Ultra is
- Akciófigyelő: Ha kéne vezeték nélkül CarPlay és Android Auto...
- Prohardver app (nem hivatalos)
- Xiaomi 11 Lite 5G NE (lisa)
- Samsung Galaxy S23 Ultra - non plus ultra
- Xiaomi 15 - kicsi telefon nagy energiával
Új hozzászólás Aktív témák
-
ArchElf
addikt
válasz
Sk8erPeter #1716 üzenetére
A hsz.-edből úgy tűnt, tapasztaltál már komolyabb problémákat.
Nem tudom miből tűnt úgy a hsz-emből... (amúgy is azt ítam, hogy le fogják - nem hogy le fogom - harapni a fejét)AE
-
ArchElf
addikt
válasz
Sk8erPeter #1709 üzenetére
Akkor pl. Qt.
AE
-
ArchElf
addikt
válasz
pckownz #1696 üzenetére
Visual Studio automatikusan adja (Intellisense-nek hívják az MS felé ezt a funkciót), nem kell nyomni hozzá semmit. Referenciának meg MSDN.
Persze a VS miatt mindjárt keresztre leszel itt feszítve. Kezdj inkább MS VC++ helyett valami (bármi) más - standard - c++-t tanulni...AE
-
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
-
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
-
ArchElf
addikt
válasz
Jhonny06 #1519 üzenetére
így nem megy?
int pm = getprojektmeret();
Project* temp1 = new Project [pm];
for(int i=0;i<pm;++i){
temp1[i]=tomb[i];
}
delete[] this->tomb;
this->tomb=new Project [pm+1];
int k;
for(k=0;k<pm;++k){
Memory::tomb[k]=temp1[k];
}
Memory::tomb[k]=a;
delete[] temp1;Amúgy így nem jó?
int pm = getprojektmeret();
Project* temp1 = new Project [pm+1];
for(int i=0;i<pm;++i){
temp1[i]=tomb[i];
}
temp1[i] = a
delete[] this->tomb;
this->tomb = temp1;AE
-
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
-
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
-
ArchElf
addikt
Gyomorból (ellenőrzés nélkül):
int pg = 0;
qint64 BSIZE = 1024*1024*4; // 4 MB buffer
char * carray = new char[BSIZE];
while(!src.atEnd()){
qint64 readchars = src.readData(carray, BSIZE);
if (readchars <= 0) break; //valami hiba, vagy file vége
qint64 writechars = dst.writeData(carray, readchars);
if (readchars != writechars) break; //valami hiba
pg = pg + writechars;
dlg->setValue(pg);
qApp->processEvents();
}
delete carray;AE
-
ArchElf
addikt
rsync binárisokkal is működik, de fontos, hogy a sync időtartama alatt a fájl ne változzon.
A legjobb megoldás az, ha az adatbázisról csinálsz egy backupot (az adatbázis saját motorjával, ha van neki ilyen) és azt szinkronizálod le. Ha nem tudsz backupot csinálni, akkor le kell választani, vagy lockolni az egész adatbázist a szinkronizálás időtartamára.Mondjuk backup legenerálása után csak akkor érdemes rsync-kel vacakolni hogy ha lassú hálózaton/eszközön akarod keresztülnyomni a fájlt (vagy ha extra nagy méretű, de kevés dolog változik benne).
AE
-
ArchElf
addikt
-
ArchElf
addikt
Ez attól is függ, mi változott a fájlban. Ha csak append jellegű a módosítás (pl logfájl) akkor egyszerű (maradékot a végére kell írni).
Amennyiveb viszont strukturálisan változik, akkor valami hash-es megoldás javasolt: pl. mint a torrent vagy edonkey protokollban - feldarabolni a fájlt virtuálisan x megabyte-os részekre és részenként hast-t készíteni rá. Ha változott a fájl akkor azokat a részeket kell átmásolni, amelyeknek a hash-e nem egyezik a korábbi változattal (ilyenkor nem a célfájlon célszerű ellenőrizni a hash-t hanem minden szinkronizációnál le kell tárolni az aktuálisat, hogy a következő szinkronizációnál a jelenlegi állapotot azzal lehessen összevetni (ehhez persze ehhez meg az kell, hogy a célfájl ne módosuljon időközben).AE
-
ArchElf
addikt
válasz
Berenyimiki #973 üzenetére
Gondolom a feladat pont az, hogy a szám kezelését lefejleszd.
Meg lehet próbálkozni valami BCD szerű megoldással, esetleg használhatsz byte/int tömböt, de ott neked kell kezelned az átviteleket...AE
-
ArchElf
addikt
válasz
Berenyimiki #933 üzenetére
AE
-
ArchElf
addikt
válasz
WonderCSabo #854 üzenetére
Ha nem kell neki a jövőben, minek tanulja meg... Néha nem értem minek szivatják ezzel az embert. Egy átlagember nem (de még egy átlaginformatikus sem) a programozásból fog megélni.
AE
-
ArchElf
addikt
válasz
Nyiscsák #822 üzenetére
Szerintem ellenőrzés előtt szedd ki belőle a szóközöket, és írásjeleket, kisbetűsítsd az egészet és engedékeny esetben í->i, ó->o, ő->ö, ú->u, ű->ü; dupla/tripla betűk egynek számítanak: cs, dz, dzs, gy, ly, ny, ty, sz, zs
Ja és van 100 karakternél hosszabb (nem értelmes) palindrom is
AE
-
ArchElf
addikt
Azért éri el, mert ugyanabból az osztályból hívod. A private nem azt jelenti, hogy csak abban az objektumban, hanem hogy ugyanabban az osztályban (az oszályból generált bármely objektumban) elérhető csak a változó/függvény/objektum/stb. így a friend teljesen felesleges is...
AE
-
ArchElf
addikt
válasz
skylinelaca #349 üzenetére
LOL, gondolom rossz a CRACK. Nem hiszem, hogy a lemezre került eredeti programot debug módban fordították volna
AE
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- A fociról könnyedén, egy baráti társaságban
- Asztrofotózás
- Szívós, szép és kitartó az új OnePlus óra
- Autós topik látogatók beszélgetős, offolós topikja
- Forza sorozat (Horizon/Motorsport)
- Autós topik
- Formula-1
- Bemutatkozott és meg is jelent a The Elder Scrolls IV: Oblivion Remastered
- Milyen autót vegyek?
- EAFC 25
- További aktív témák...
- Madlions Mad G - 2 év garancia
- Lenovo SL500 2magos CPU 2x1,8 Ghz 160GB HDD 4GB Ram Win11 64bit Office telepítve
- Eladó bontatlan eredeti Apple MagSafe-rögzítésű iPhone 14 Plus-szilikontok éjfekete (MPT33ZM/A)
- Palit GeForce RTX 3080 GamingPro 10GB GDDR6X
- Fonestar Bluevintage 45B aktív hangfal Új, Bontatlan/már csak pár db van
- iKing.Hu- Apple Macbook 13 M1 Pro Touchbar - 2020 - Használt, karcmentes, 22 töltés
- Apple iPhone 8 64GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! GIGABYTE H110M i5 6500 16GB DDR4 240GB SSD GTX 1050 Ti 4GB Deepcool D-Shield V2 500W
- BESZÁMÍTÁS! MSI B450M R5 4500 32GB DDR4 512GB SSD RX 5700XT 8GB Rampage SHIVA Zalman 600W
- Xbox Ultimate előfizetések
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest