PDA

View Full Version : [C++] malfunzionamento


sobrano
10-06-2010, 17:00
#include <iostream>
using namespace std;
const int N=3065663;
int main()
{
int v[N];
for (int i=0;i<N;i++)
{
v[i]=i+1;
}
}


ho fatto questo programma semplicissimo,viene compilato senza problemi ma crasha immediatamente come provo ad eseguirlo.
sembra che il limite sia const int N=500000.
sapreste dirmi dove sbaglio?

Teo@Unix
10-06-2010, 19:30
A prima vista, credo tu abbia raggiunto le massime dimensioni dello stack, meglio se usi new(), dato che stiamo parlando di C++, new usa l'heap.

A meno che sia un'altro il problema ma non credo...

sobrano
10-06-2010, 22:13
dunque devo lavorare con i puntatori?

tuccio`
10-06-2010, 23:37
A prima vista, credo tu abbia raggiunto le massime dimensioni dello stack, meglio se usi new(), dato che stiamo parlando di C++, new usa l'heap.

A meno che sia un'altro il problema ma non credo...ma il limite dello stack è lo heap e il limite dello heap è lo stack, quindi che cambia? :asd:

Teo@Unix
10-06-2010, 23:51
concordo, ma sempre meglio l'heap...

DanieleC88
11-06-2010, 00:51
ma il limite dello stack è lo heap e il limite dello heap è lo stack, quindi che cambia? :asd:
Il limite non come indirizzo, ma come dimensioni. Lo stack solitamente ha una grandezza di qualche megabyte, nell'heap puoi allocare molta più roba.

sobrano
11-06-2010, 01:05
qual'è quindi la sintassi corretta per allocare il mio array nell'heap?

DanieleC88
11-06-2010, 01:11
int v[] = new int[N];

// ...

delete v;

tomminno
11-06-2010, 08:47
qual'è quindi la sintassi corretta per allocare il mio array nell'heap?

Già che siamo in C++ perchè non usare vector?

std::vector<int> v(N);

shinya
11-06-2010, 10:53
int v[] = new int[N];

// ...

delete v;

delete [] v;
FTFY. :D

DanieleC88
11-06-2010, 10:59
D'oh, hai ragione. :cry:
Quando il sonno è troppo e l'ora è tarda finisco col fare ste prodezze. :stordita:

sobrano
11-06-2010, 13:32
non dovrebbe essere:

int* v[] = new int[N];

// ...

delete v;

che so io new restituisce un indirizzo...

DanieleC88
11-06-2010, 13:37
No, new crea un nuovo oggetto nell'heap, che poi sia effettivamente un puntatore o no dipende dai casi. Nel caso di un vettore non serve.