Új hozzászólás Aktív témák
-
cog777
senior tag
Sziasztok!
Most nézem át a c++ operátor overloading-ját, van két megoldás:
class Point
{
public:
Point(int x, int y) {Point::x=x;Point::y=y;}
Point operator+(Point &p) {return Point(x+p.x, y+p.y);}private:
int x,y;
}A kérdésem:
"Point operator+(Point &p) {return Point(x+p.x, y+p.y);}" Miért lehet elérni a "p.x"-et??? (illetve a p.y-t?) (Az adatrejtés elve miatt kérdezem, hiszen private )A másik megolds szinte ugyanez:
class Point
{
public:
Point(int x, int y){Point::x=x;Point::y=y;}
friend Point operator+(Point &p, Point &q) {return Point(q.x+p.x, q.y+p.y);}private:
int x,y;
}Itt már értem, hiszen a friend el tudja érni a private adatokat!
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
Köszönöm a gyors válaszokat!!!
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
Üdv!
Ha valakit érdekel, egyszerű de nagyszerű memória foglalás/felszabadítás nyilvántartót írtam (interneten található példákat felhasználva), segítségével a memory leak-ot lehet könnyen detektálni. Igaz, Qt-s GUI programokra hegyeztem ki, de át lehet alkalmazni nem Qt-s programokra is. Csak be kell illeszteni a kívánt forráskód include blokkjának a végére a #include "mynew.h"-t. Illetve a program végén meghívni a printList(); deleteList(); függvényeket.
https://github.com/zhanisch/DetectingMemLeak.git
Git-tel letölteni:
git clone https://github.com/zhanisch/DetectingMemLeak.git
Futtatva:
Starting /home/zhanisch/documents/QtProjects/build-DetectingMemLeak-Desktop_Qt_5_0_2_GCC_32bit-Debug/DetectingMemLeak...
Not relased object at: 162713376, file: ../DetectingMemLeak/mainwindow.cpp, line: 19
Not relased object at: 162711392, file: ../DetectingMemLeak/mainwindow.cpp, line: 23
/home/zhanisch/documents/QtProjects/build-DetectingMemLeak-Desktop_Qt_5_0_2_GCC_32bit-Debug/DetectingMemLeak exited with code 0HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz D®. GeNy@ #2132 üzenetére
Hello!
Ez azt jelenti hogy a programnak vissza kellene adni a keretprogramnak 2x tabot és 1 entert? (Nem teljesen világos a feladat)
TAB billentyű 2x bevitel egymás után, majd ezután egy ENTER parancs küldése.
TAB-ot /t
Entert a /n jelöli.Tehát [link] a példa szerint, neked ezt kellene írnod:
cout << "/t/t/n";
(Nézd meg a teljes példát)
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz WonderCSabo #2135 üzenetére
Találkoztam már vele igen, de pár platform sajnos nem támogatja.. így ezt találtam ki. Még fejlesztenem kell rajta, rendezett listát akarok csinálni és bináris kereséssel hamarabb megtalálni a keresett pointert. Fákat nem hiszem hogy akarok implementálni.
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz Jester01 #2151 üzenetére
Köszi a tippet a dmalloc-ra, megnézem. Másrész az STL konténerek gondolom hasonló mellékhatást okozna mintha használnám a Qt konténereket bizonyos! fordító alatt pl qcc. Rekurzívan meghívja magát a new operator... ???? g++ -al oké a dolog.
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
Udv!
A memoria szivargas kereso g++ alatt remekul mukodik az std::map sajat allocatorral. Viszont Blackberry alatt a qcc nem birja leforditani.
Itt a cod:
Igy hasznalom:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <map>
#include "allocator.h"
#include "mynew.h"
#undef new
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
typedef struct node node_t;
struct node {
void * ptr;
bool array;
unsigned int line;
const char *file;
};
std::map<void *, node_t *, std::less<void *>,
fooStdAllocator<std::pair<void *, node_t *> > > booking;Hibauzenetek:
/Applications/bbndk/target_10_1_0_1020/qnx6/usr/include/cpp/xtree:174:51: error: no type named 'difference_type' in 'std::_Tree<std::_Tmap_traits<void*, node*, std::less<void*>, fooStdAllocator<std::pair<void*, node*> >, false> >::allocator_type {aka class fooStdAllocator<std::pair<void* const, node*> >}'
...
/Applications/bbndk/target_10_1_0_1020/qnx6/usr/include/cpp/xtree:189:8: error: no type named 'difference_type' in 'std::_Tmap_traits<void*, node*, std::less<void*>, fooStdAllocator<std::pair<void*, node*> >, false>::allocator_type {aka class fooStdAllocator<std::pair<void* const, node*> >}'
../src/mynew.cpp: In function 'void removeFromList(void*, bool)':
../src/mynew.cpp:42:64: error: conversion from 'std::_Tree<std::_Tmap_traits<void*, node*, std::less<void*>, fooStdAllocator<std::pair<void*, node*> >, false> >::iterator' to non-scalar type 'std::map<void*, node*>::iterator {aka std::_Tree<std::_Tmap_traits<void*, node*, std::less<void*>, std::allocator<std::pair<void* const, node*> >, false> >::iterator}' requested
../src/mynew.cpp:44:28: error: no match for 'operator!=' in 'itr != booking.std::map<void*, node*, std::less<void*>, fooStdAllocator<std::pair<void*, node*> > >::<anonymous>.std::_Tree<_Traits>::end [with _Traits = std::_Tmap_traits<void*, node*, std::less<void*>, fooStdAllocator<std::pair<void*, node*> >, false>]()'
...
../src/mynew.cpp:46:26: error: no matching function for call to 'std::map<void*, node*, std::less<void*>, fooStdAllocator<std::pair<void*, node*> > >::erase(std::map<void*, node*>::iterator&)'Ha van valakinek otlete, orulnek neki ha megosztana hogy merre induljak el.
[ Szerkesztve ]
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz Jester01 #2168 üzenetére
Koszonom a tippet, mar fordul. Csak eppen lefagy. Megneztem az eredeti std::allocator-ral is fagy meghozza a find funkcioban kapok segmentation fault-ot. Kiserletezek vele, ha valamire jutok akkor kozze teszem.
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz bandi0000 #2423 üzenetére
C-ben azert nehezebb programozni mint C++-ban. Biztos hogy C-ben akarod megcsinalni? Ugyanis C-ben nagyon kell figyelni dolgokra, pl ha elszursz egy pointert akkor megjosolhatatlan lehet a program viselkedese, vagy ha nem inicialialsz 0-val egy teruletet ahol string-et tarolsz akkor a printf tovabbi karaktereket is kiirat mert nem talalja a 0-a veget.
for ciklust 1-es index-el kezdted, igy akartad?
fscanf beolvassa ugyan az ertekeket es a string-et is de mi a garancia hogy a string pont akkora a szovegben mint a memoria teruleted:char re[3][7]? Mivel csak 7 karaktert foglaltal le es nem 8at azert hogy 0-t rakj a vegere ezert a printf tovabb irja a szoveget mint 7 karakter.printf utolso parametere nem &re[ I ]hanem csak re[ i ]
"Elvileg ennek tökéletesen kellene mennie"
Bocsanat, nem kotekedesnek szanom, de szerintem a buffer overflow betoreseket is ezek a kielentesek okozzakUgy erdemes programot kesziteni hogy torekszel arra hogy a hiba lehetosegek szamat minimalisra szoritsd.
Hacsak nem kifejezetten C-t akarsz tanulni linux kernel driver iras miatt, akkor inkabb hasznalj C++-t modern technologiakkal:std::array ahol beallitod a meretet a tomb-nek, .at(index) -el elered az elemet (es ha tul index-elsz akkor egybol latod mi a baj), komplett sort olvasnek be a helyedben es std::string-et hasznalnek majd onnan masolnam at az egyes reszeket struct-t ba mivel ezek a sorok egybe tartoznak.
Remelem sikerul atirnod! Sok sikert!
[ Szerkesztve ]
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
cmake kerdesem van. Egy eleg nagy projektben (600 cmakefiles) kell egy uj ficsort keszitenem. A problema a korkoros dependency.
Szoval protokol modul hasznalta a driver-t. Driver object-kent volt, protocol static-kent forditva.
Most az uj ficsor a driver-bol hasznal protokolt. Igy cmake kiirta hogy ez biza cyclic dependency es legalabb 1 target nem static.Valoban, driver nem az.
Nosza allittsuk at object-rol static-ra.
Lefordul, orom bodotta.
Vazz, a ficsor kodja lefordul, latom a logban de nem linkelodik ossze es nem is tudok breakpoint-ot tenni ra. Mikor objectkent volt linkelve akkor breakpoint mukodott.
Persze, megallapitottuk hogy ezt a reszt ujra kellene strukturalni, de most 1 ideiglenes megoldast kell csinalnom.
Megkoszonom ha valaki hozza tudna szolni a szituaciohoz es adni tanacsotHP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
-
cog777
senior tag
Tud valaki c++ teszteket? Lehetoleg advanced level-t vagy magasabbat, akarok allas interjuzni a kozeljovoben es bizonyos dolgokban berozsdasodtam. Linkedin-en van par kurzus c++20-al kapcsolatban, de ugy erzem jo lenne teszteket csinalgatnom.
HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
-
cog777
senior tag
válasz Tomi_78 #4449 üzenetére
Koszi, az elsot nem tolti be. Igen, bar nekem evekkel korabban a Google sokszor nagyon alap kvizeket adott ki, ezt pl 25-bol 24-et sikerult eltalalnom, tul alap.
Most rakeresve "c++ quiz" kifejezesre, tobb tesztet talaltam, pl c++20 teszt. Bocs a zajt.
[link] , [link] , [link]HP ZBook Workstation A3000 - Linux Mint; Raspberry Pi4 - Raspbian
Ú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!
- Lakáshitel, lakásvásárlás
- Medence topik
- Autós topik
- bb0t: Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
- Spyra: akkus, nagynyomású, automata vízipuska
- Magisk
- GoodSpeed: Windows 11 PRO FPP (Full Packaged Product) - Retail, Box, dobozos
- Milyen TV-t vegyek?
- Samsung Galaxy A72 - kicsit király
- Helldivers 2 (PC, PS5)
- További aktív témák...
- EDIFIER R1700BTS hangfal pár makulátlan, új állapotban, 2 év hivatalos garanciával, alkalmi áron
- LG OLED55B23LA 2 Év GYÁRI GARANCIA
- Apple iPhone XR 128GB, Kártyafüggetlen, 1 Év Garanciával
- Gamer PC , i7 12700KF , RTX 3080 Ti , 64GB DDR5 , 960GB NVME , 1TB HDD
- Intel PC , i5 8500 , 1660 6GB , 32GB DDR4 , 512GB NVME , 500GB HDD
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen