Toon posts:

[C] heel groot array leidt tot segmentation fault

Pagina: 1
Acties:
  • 41 views sinds 30-01-2008

Verwijderd

Topicstarter
Als ik in C een 2-dimensionaal array declareer van een enorme grootte, dan crasht het programma door een segmentation fault.

Mijn vraag is nu, hoe kan ik er voor zorgen dat het programma niet crasht maar wel een foutmelding geeft en gewoon stopt.

Zo is het nu:
code:
1
2
int n = 65000;
double array[n][n];


Ik heb ook geprobeerd (zelfde probleem):
code:
1
2
3
4
5
int n = 65000;
double **array;
array = (double **) malloc(n*n*sizeof(double));
if(array == NULL)
    exit(EXIT_FAILURE);


Nog een vraag: wat gebeurt er eigenlijk precies als ik in C type
code:
1
double array[10];


Wordt dit vervangen door malloc()...?

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Je kan toch controleren hoeveel geheugen je vrij hebt en dat vergelijken met de hoeveelheid die je nodig hebt, vóór de poging tot toewijzing?

[ Voor 38% gewijzigd door Confusion op 29-09-2005 20:12 ]

Wie trösten wir uns, die Mörder aller Mörder?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Hier was gister nog een topic over van iemand die ook een erg groot array wilde maken, alleen wilde diegene er dan voor zorgen dat het wel lukte. Lees [rml][ C] Probleem met gebruik van grote arrays[/rml] maar eens door. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

als ik me niet vergis kan je eerste code niet werken aangezien je "int n" geen const int is.

bij double array[10] wordt de stack pointer verlaagd met (10 * sizeof(double)).

ASSUME makes an ASS out of U and ME


Verwijderd

Topicstarter
success, at last!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double **matrix;                                         
                                                         
matrix = (double **) malloc(n*sizeof(double *));         
if(matrix == NULL)                                       
{                                                        
    printf("ERROR: memory allocation has failed.\n");    
    exit(EXIT_FAILURE);                                  
}                                                        
for(i = 0; i < n; i++)                                   
{                                                        
    matrix[i] = (double *) malloc(n*sizeof(double));     
    if(matrix[i] == NULL)                                
    {                                                    
        printf("ERROR: memory allocation has failed.\n");
        exit(EXIT_FAILURE);                              
    }                                                    
}                                                        
printf("memory allocation has succeeded\n");

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:20

.oisyn

Moderator Devschuur®

Demotivational Speaker

Tja, [rml][ C] Probleem met gebruik van grote arrays[/rml] is in feite exact hetzelfde topic. Je kunt daar verder als je evt. nog iets wilt weten (of wellicht staat je antwoord daar al) :)

[ Voor 10% gewijzigd door .oisyn op 29-09-2005 22:27 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.