Sei sulla pagina 1di 6

HEAP

int pelintamanoclsizeofcinti

permettediallocarememoria suoheap

nonpuòessere ausata
p daaltri

HEAP

free p liberarel'areadimemoria

peraltri utilizzi

Int f=malloc(sizeof(int));

Int* f=(*int)malloc(sizeof(int));

Free(f);

// Memoria è libera —> devo essere io a liberarla

// Memory leak se non libero la memoria —> va in crash

Riempire apposta la memoria per farlo crashare

Int main(){

while(1){

Void *p = malloc(128);

RIGA DI COMANDO per compilare ed eseguire

Ls

Gcc -o nome nome (compilare)

./nome (esegue)

Array di 32 double allocato su heap

Double *v = (double*) malloc (32*sizeof(double));

Malloc restituisce void* —> noi vogliamo in double (no dereferenziare puntatore void, un problema —> prima di
malloc mettiamo (double*)

Per i double

V —> 0x00

V+1 —> 0x00 + sizeof(double)

Se lo facevamo nel void

V —> 0x00

V+1 —> 0x01

Se lo facevamo nell’int

V —> 0x00

V+1 —> 0x00 + sizeof(int)

unsigned int 4byte 4 8 bit 32 bit

232

questobit e per il segno o positivo 1negativo

perdo1 bit 231

CALLOC garanzia che la memoria deve essere inizializzata da zero

Void *calloc(size_t nmemb, size_t size); —> funzione

Int* p=(int*)calloc(64, sizeof(int)); —> come la uso

Con malloc sarebbe int* p=(int*)malloc(64*sizeof(int));

REALLOC funzione cambia la dimensione del blocco della memoria puntata

Void *realloc(void *ptr, size_t size);

Int n=5;

Double v[n];

Così non funziona —> posso farlo con le costanti ma non con le variabili

Nei compilatori più recenti si può fare ma brutto, non in tutti i compilatori —> allocato nello stack

Double *p = (*double) malloc (sizeof(double))

Può essere utile allungare o accorciare un vettore —> mettere array di una certa dimensione, quando è pieno lo
allungo, non posso farlo lunghissimo all’inizio perché occupa un sacco di memoria

Le cose che c’erano prima devono rimanere lì —> posso sia allungare che accorciare la dimensione del vettore

A priori l’indirizzo può non essere sempre lo stesso —> se c’è spazio lo allunga lì, se non c’è copia tutto e lo
sposta da un’altra parte dove ha spazio

Per allungare la memoria la raddoppio —> meno volte la allungo + è e ciente la funzione

DENTRO ALLA STACK = memoria, ci sono gli indirizzi, le variabili locali e gli indirizzi di ritorno per le funzioni

Togliere le protezioni per entrare nel debugger (ASLR)

gcc -g -fno-stack-protector

—>

Quando si stampano gli array il cout dipende dal tipo:

1) CHAR

char str[]=“hello”;

Cout<<str; —> stampa “hello”

Cout<<(void*)str; —> stampa l’inidirizzo del primo elemento (trasformo str in un vettore void), questa
trasformazione vale solo per i vettori di caratteri

2) INT

Int arr[]={8,9,10};

Cout<<arr; —> stamp l’indirizzo del primo elemento

Pr vedere 8,9,10 devo ciclare l’array

Distinguere indirizzi e contenuti

Una cella di memoria ha un indirizzo di memoria, dentro a una cella c’è un indirizzo (tutti gli esadecimali sono
numeri), una cella pesa un byte

X/x bu er —> mostra il contenuto del primo indirizzo del vettore bu er

X/2x bu er —> mostra i contenuti del primo e del secondo (0 e 1) del vettore bu er

Vado avanti così e prima o poi viene fuori un contenuto, che è l’indirizzo di ritorno alla funzione (l’indirizzo in
questo caso è il contenuto)

Adesso gli mettiamo dentro al posto del contenuto dove c’era l’indirizzo di ritorno alla funzione, gli metto dentro
l’indirizzo della funzione hackerata —> nel cout c’è YOU’VE BEEN HACKED e dopo si bugga ma intanto si è
crashato e gli hacker sono felici

Bu er[16]=0x49;

Altro modo per fare la chiamata alla funzione:

Bu er[16] = (long int) &hacker_function; —> indirizzo della fnzione

OPERATORE NEW stessa roba di malloc —> creava un puntatore a della memoria che decido io —> new è ugual
ma è scritto più easy

Int *q = new int

Creare una nuova struttura dati

puntaannua
agthon
nuuptr

solo untipopertutti inodipane ogni


nodonatipostructnod structnodel
intkey Autoreferenziale
structnodexnext indirizzihannotuttila stessadimensione loastachesailnome
g
intmaini Il
structnodeknodeleo puntadell'ultimononvaaniente meteo
structnodensi
ns.key 8 Yuetimonodo
ns.next null creareunnodoineapistacknonimporta
nunext 8ns nodoacasopuntaall'indirizzodelprossimo

ARRAYDINAMICO
Fare unvettorecheauocalamemoriasumaneap quandoeliminoil vettorenon siliberainautomaticoanche laheap
eousoperaccederedentroeadasse

classarray int pius 21k a intmaincintargachartargulli


private this sizesize aria in P 2 1256
intep
ma
public 3 array.intplus2 narray.intplus21k
array.intplusaint contadestructornasbeencanea lofaccioquandoc'e'ilnew
rarray.intplus211 deleterie
g abbiamounvettore
perché
Laistruttorelinvocatoinautomaticoanandoeliminounelemento
Cosericorsive
Funzionericorsivacheveriricaseunastringaèpalindroma
booeis paeinaromeistnintp.int
impari
returntrue

I
ifistrip sereni
returnfalse
returnisparinaramelstroptera

Funzionericorsivaperlasommadeiprimi numeri naturali

intsumcintn ifcn.ca

return n
returnntsumcn.es

Prodottocomesommaripetuta
intmoet
sumcintn.intm iflm.ca
casobase
return
returnn'moetsumcn.mn

Funzionericorsivaperex.EE

aoubieexcintxintn.iters aouaeresuea aouaeaenom

1
arcintneaninitersin resueteresuettuxencaenomenomani

genoma

Playeristringying
private this name x thisnamename
stringname
int pts g
public su
piayercstring.int stringplayer get.namec const thisptspts
stringgetnameliconst returnname
intgetpesciconst
voidsetnamelstringi mainly
via setpiscina ser get player pesupermario 71
returnpts
playerEreditadaplayer superpiayernatparametricoltre a quei aiplayer
super
classsuperplayer publicplayer
arrivate
Charsuperskiel
audio listadiinizializzazione
superplayeristringname intptscharsuperskiel playernamepesi
this superskile superskill

Char get_superskilei constE


return superskiel

aplayerfeipassassioper farepassaggioperriferimento
anche
valorepotrei
ad
contap.get.namelicenal
siscende
coutccp.get.pt
contapget_superskieeckenae

nemain Il
player pisupermario 7
contap.get.namec ca siscende
p.get.pt
superplayersplienisi 8,1k
contap.get.namec ca pgetpiscia capget_superskiellscende
api

Econoconcettoastratto puntiincomune poicisonodiversiveicoliescamioncheereditanodaveicolo


lassvehicle asstrackpublicvenice intmainc
unici private
virtualvoiddrive stringserialnumber truckl'abc100
virtualvoidbrakeno doublemaxload

public
trucastringseriannumberacuolemaxecadk
tendere
ladevo this seriannumoer serialnumber
astratta nocreare this max load maxload
vehicles
game
driveebrakenella
classefiglia

senonchiedemanco
funzionericorsivainfinitae faanocaz.aminfinito voidFi
doubletv new
doublenon
returnFei
funzionechesommaelementoperelemento int fintiv1intera
intsa intxv
newintcsat.ladimensionelamettodopo
forcintegissa itt
Li vai vali

int Fintan
dielementiconsecutiviprimadiun 1 if ven
returna

ma

avocaredinamica
ricorsione

progroggetti

Potrebbero piacerti anche