Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Alocare dinamica in C++  (Citit de 18286 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
stifmeister
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« : Martie 11, 2005, 22:40:35 »

Am nevoie de niste informatii referitoare la alocarea dinamica in C++.
Lucrez in Borland  C++ 3.1 si am rezolvat 2 probleme propuse pe Infoarena. Solutiile sunt pe baza de formule de calcul usor de implementat si care ofera rezultatul aproape instantaneu.
Problema este ca am nevoie de tablouri de dimensiuni mari.
Ex.   int   a[200][400];

O astfel de declarare produce eroare la compilare : "Array size to large".

Am incercat sa aloc dinamic in felul urmator:
===================================
int   *a[200];

for(i=0; i<200; i++)
   a = new int[400];
===================================

Operatia decurge cu succes dar pentru numere mari apar diferite neajunsuri:
Exemple:
1. valorile unor variabile se modifica nejustificat;
2. obtin erori de tipul : "Null pointer assignment";
3. se inchide Borland C++ brusc;


Am incercat sa folosesc si "malloc":
========================================================
int   *p;

if( (p = (int*) malloc(NMax)) == NULL )
      printf("Not enough memory to allocate buffer\n");
========================================================

Aceleasi rezultate le-am obtinut si cu aceasta implementare iar la alocarea tablourilor mesajul "Not enough memory to allocate buffer" aparea pe ecran de mai multe ori.



Cum sa procedez ca sa pot aloca tablouri mari in memorie???

(Am marit si heap-ul dar nu am observat nici o imbunatatire).
Memorat
druid
Strain
*

Karma: 1
Deconectat Deconectat

Mesaje: 27



Vezi Profilul
« Răspunde #1 : Martie 12, 2005, 00:34:06 »

Operatorul new e doar un 'cover' pt malloc(), e acelasi lucru.

Pe infoarena programele se compileaza pe linux (gcc/g++) si acolo poti sa declari si global si poti sa aloci destula memorie. Poti sa pui #define MAXN 200 de ex si cand lucrez pe borland micsorezi limita si incerci doar cazuri mai mici pt teste.

Mai e o optiune Options->Compiler->Code generation->Memory model. Daca selectezi large sau huge ai mai multa memorie... dar oricum, tot putina in general.

Borland sux, treci pe GNU Smile
Memorat
fbkk
Client obisnuit
**

Karma: -13
Deconectat Deconectat

Mesaje: 72



Vezi Profilul
« Răspunde #2 : Martie 12, 2005, 11:52:47 »

druid are dreptate, treci pe GNU, Borland 3.1 e cam depasit.
Din toate concursurile ,pe care le stiu ,toate evalueaza si pe GNU, sau numai pe GNU (mai putin la OJI Sad ).
Daca lucrezi pe Windows ai putea sa treci pe la Situl Dev-Cpp, si pe la pagina lor de download
,sau daca preferi un pachet mai mare : DJGPP
Memorat

No one should have to code the same thing twice !
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #3 : Martie 12, 2005, 12:19:01 »

Citat din mesajul lui: fbkk
druid are dreptate, treci pe GNU, Borland 3.1 e cam depasit.
Din toate concursurile ,pe care le stiu ,toate evalueaza si pe GNU, sau numai pe GNU (mai putin la OJI Sad ).
Daca lucrezi pe Windows ai putea sa treci pe la Situl Dev-Cpp, si pe la pagina lor de download
,sau daca preferi un pachet mai mare : DJGPP


Off subject: Ba schimbati semnatura, e ONI 2005, nu 2004... Tongue
Memorat
fbkk
Client obisnuit
**

Karma: -13
Deconectat Deconectat

Mesaje: 72



Vezi Profilul
« Răspunde #4 : Martie 12, 2005, 12:59:57 »

Citat din mesajul lui: bogdan2412
Off subject: Ba schimbati semnatura, e ONI 2005, nu 2004... Tongue

Offtopic: Mersi, de cand fac info am uitat ce an e ... Tongue
Memorat

No one should have to code the same thing twice !
stifmeister
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #5 : Martie 13, 2005, 22:39:13 »

Problema mea este la ONI.

Eu am DJGPP. L-am si folosit pentru cele 2 probleme pe care le-am mentionat. Nici nu am mai

alocat dinamic pentru ca in GNU am putut declara un tablou de 200X500. Dar la ONI eu voi

lucra in Windows si nu cred ca au ei DJGPP instalat pe calculatoarele unde o sa stau eu. Si

chiar daca evaluarea se face in GNU, imi vine cam greu sa dau o sursa care pe BC++ 3.1 nu

se compileaza, sperand ca va merge in GNU.
 
Si, cum fac sa initializez un tablou cu 0 in GNU? Daca folosesc "memset" imi da eroare.

Mai stiu de la ONI de anii trecuti ca "stdlib.h" nu merge sub linux. Dar am compilat o

sursa in GNU si mi-a cerut sa includ stdlib ca sa pot folosi functia abs. Unde pot gasi o

lista cu ce header-e sa folosesc in gnu?
Memorat
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #6 : Martie 13, 2005, 22:56:52 »

Citat din mesajul lui: stifmeister
Problema mea este la ONI.

Eu am DJGPP. L-am si folosit pentru cele 2 probleme pe care le-am mentionat. Nici nu am mai

alocat dinamic pentru ca in GNU am putut declara un tablou de 200X500. Dar la ONI eu voi

lucra in Windows si nu cred ca au ei DJGPP instalat pe calculatoarele unde o sa stau eu. Si

chiar daca evaluarea se face in GNU, imi vine cam greu sa dau o sursa care pe BC++ 3.1 nu

se compileaza, sperand ca va merge in GNU.
 
Si, cum fac sa initializez un tablou cu 0 in GNU? Daca folosesc "memset" imi da eroare.

Mai stiu de la ONI de anii trecuti ca "stdlib.h" nu merge sub linux. Dar am compilat o

sursa in GNU si mi-a cerut sa includ stdlib ca sa pot folosi functia abs. Unde pot gasi o

lista cu ce header-e sa folosesc in gnu?


O sa ai DJGPP la ONI (ce iti trebuie de fapt sunt RHIDE + GCC si o sa le ai). Pentru memset foloseste "string.h" ... "mem.h" nu eixsta. abs() e si in math.h dar poti sa o scrii singur intr-o linie:
Cod:
#define abs(x) ((x) < 0 ? (-(x)) : (x))

Eu asa fac de obicei. Uita-te in RHIDE in help-ul la o functie la care vrei s-o folosesti, iti va zice in header se afla.
Memorat
stifmeister
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #7 : Martie 16, 2005, 22:01:30 »

Unde gasesc o lista cu tipurile de date din gcc? Am nevoie de o structura de date pe 64 de biti.
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #8 : Martie 16, 2005, 22:26:49 »

gasesti pe undeva prin helpurile de la gcc!
pe 64 de biti, numere intregi, stiu ca este long long! iar pt nr reale ai double!
Memorat
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #9 : Martie 16, 2005, 22:27:13 »

Citat din mesajul lui: stifmeister
Unde gasesc o lista cu tipurile de date din gcc? Am nevoie de o structura de date pe 64 de biti.


http://www.google.com
Si pentru 64 de biti foloseste long long
Memorat
teplesnescdenutevezi
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #10 : Martie 17, 2005, 00:56:35 »

bai...care-mi explicati si mie de la ce vine CRT ? va rog ... ce functii include ? ni s-a spus la oji ca n-avem voie sa folosim functiile din crt...dar eu nici nu stiu care sunt alea ...
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #11 : Martie 17, 2005, 11:45:42 »

Este vorba despre pascal. Unul din uniturile din pascal se cheama crt.
Memorat
teplesnescdenutevezi
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #12 : Martie 17, 2005, 16:59:44 »

damn....de nu l-am cautat in c++ de m-au luat dracii.
Memorat
svalentin
Nu mai tace
*****

Karma: 88
Deconectat Deconectat

Mesaje: 704



Vezi Profilul
« Răspunde #13 : Martie 17, 2005, 17:36:59 »

In C, are ca echivalent conio.h. (adica sa nu il incluzi pe asta la concursuri)
Memorat
teplesnescdenutevezi
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #14 : Martie 17, 2005, 18:09:51 »

imi poate trimite si mie cereva o implementare in c++ de arbori AVL ? pls... v-as fi foarte recunoscator.
 
mail: [email protected]
Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #15 : Martie 17, 2005, 20:07:15 »

Si eu as vrea.....
mail: [redacted]@gmail.com
« Ultima modificare: Februarie 02, 2013, 01:18:08 de către Bogdan-Cristian Tataroiu » Memorat
greco
Nu mai tace
*****

Karma: 144
Deconectat Deconectat

Mesaje: 434



Vezi Profilul
« Răspunde #16 : Martie 17, 2005, 20:18:13 »

http://info.devnet.ro/articole.php?page=art&art=22&artpage=5
Memorat

Jump in the cockpit and start up the engines
Remove all the wheelblocks there's no time to waste
Gathering speed as we head down the runway
Gotta get airborne before it's too late.
teplesnescdenutevezi
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #17 : Martie 17, 2005, 22:12:18 »

hmmm....multumesc.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines