Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071

    [C]Errore stack

    codice:
    int* counting(int v[], int n, int k){
    	int tmp[50], c[10];
    	int i;
    
    	for(i = 0; i < k; i++) c[i] = 0;
    	for(i= 0; i < n; i++) c[v[i]] = c[v[i]] + 1;
    	for(i = 1; i < n; i++) c[v[i]] = c[i] + c[i - 1];
    	for(i = n - 1; i >= 0; i--){
    		tmp[c[v[i]]] = v[i];
    		c[v[i]] = c[v[i]] - 1;
    	}
    	for(i = 0; i < n; i++) v[i] = tmp[i];
    
    	return v;
    }
     
    void main(){
    	int v[] = {3,6,9,1,2,1,4,3,1,7};
    	
    	counting(v, 10, 9);
    
    	for(int i = 0; i < 10; i++)
    		cout<<v[i]<<" ";
    
    }
    Faccio partire il programma, appena entra nella funzione mi appare il seguente errore:
    Stack around the variable 'tmp' was corrupted." (Interrompi, riprova, annulla)
    Che vuol dire? VVoVe:

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C]Errore stack

    Originariamente inviato da Il Pazzo
    Faccio partire il programma, appena entra nella funzione mi appare il seguente errore:
    Non so che algoritmo sia quello realizzato nella funzione ma una cosa sicura è che il decimo elemento dell'array 'c' non viene inizializzato a zero. Pertanto è molto probabile che ci siano casini ..... (non ho verificato nei dettagli).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao Pazzo,

    quel messaggio puo apparire quando per es scrivi un dato in memoria ad un indirizzo non valido.

    per es.

    char vett[3];

    vett[4]='c';

    nel tuo caso prova a cambiare

    for(i = 0; i < k; i++) c[i] = 0;

    con

    for(i = 0; i <= k; i++) c[i] = 0;

    Spero ti sia di aiuto!!!

    ciauz!





    PS. Anticipato da AndBin

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La causa dell'errore e' che, per i =3, il valore di c[v[i]] in questa riga

    tmp[c[v[i]]] = v[i];

    vale -1 (e questo fatto altera il valore dei dati vicini a tmp nello stack, da cui l'errore).

    Il perche' capiti cio', dipende dall'algoritmo che stai implementando ...

  5. #5
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    e boh... a quanto pare questo algoritmo si chiama counting sort
    Comunque grazie e ora vedo di correggere.. vediamo quello che esce fuori...

  6. #6
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Ecco la riga incriminata:
    codice:
    for(i = 1; i < n; i++) c[v[i]] = c[i] + c[i - 1];


    da correggere con
    codice:
    for(i = 1; i < n; i++) c[i] = c[i] + c[i - 1];


  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Il Pazzo
    Ecco la riga incriminata:
    codice:
    for(i = 1; i < n; i++) c[v[i]] = c[i] + c[i - 1];


    da correggere con
    codice:
    for(i = 1; i < n; i++) c[i] = c[i] + c[i - 1];

    Anche se l'errore si manifestava in seguito ...

    P.S. Puoi scrivere

    for(i = 1; i < n; i++) c[i] += c[i - 1];

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.