Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Stack overflow in C

  1. #1

    Stack overflow in C

    In che modo posso dare un valore molto elevato al numero di colonne di questa matrice (es. 100000) senza che in esecuzione abbia un segmentation fault?
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int main(void){
      int*pos = NULL, r=0, c=0, t=0;
      int i, j;
      printf("Inserisci il numero di colonne: ");
      scanf("%d",&c);
      printf("Inserisci il numero di righe: ");
      scanf("%d",&r);
      pos =(int*)calloc(r*c,sizeof(int));
      srand48(time(0));
      for(i=0; i<r; i++){
        for(j=1; j<c; j++){
          if(((double)lrand48()/RAND_MAX)>0.5){
        (*(pos+c*i+j))=(*(pos+c*i+(j-1)))+1;
          }
          else(*(pos+c*i+j))=(*(pos+c*i+(j-1)))-1;
        }
      }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Questo codice non genera stack overflow con 100000 colonne e 2 righe ...

    Dato che allochi dinamicamente devi solo avere la memoria disponibile ... ma non usi lo stack in questo modo.

    P.S. Ma tu studi il C o lo subisci ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    P.S. Ma tu studi il C o lo subisci ?
    Scusa ma questa è troppo bella, te la rubo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quote Originariamente inviata da oregon Visualizza il messaggio
    P.S. Ma tu studi il C o lo subisci ?
    Concordo: questa è eccezionale!

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.