Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    [C++]Processo figlio che non esegue la stampa

    Ho questo codice:

    codice:
    #include <iostream>
    #include <unistd.h>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
        int* mem=new int[100];
        int pid=fork(),val;
        if(pid!=0)                 // padre
        {
            delete[] mem;
        }
        else   // figlio
        {
            cin >> val;
            for(int i=0;i<100;i++)
            {
                mem[i]=5;
                cout << mem[i];
            }
        }
        return 0;
    }
    Il problema è che il programma termina subito, ma non esegue alcuna stampa.
    Eppure la dovrebbe eseguire la stampa, perchè il processo figlio ha la variabile pid che vale zero, per cui in quell' else ci dovrebbe antrare.
    Poi nel libro scrive che "entrambe i processi hanno le proprie immagini private della memoria".
    Questo proprio non l' ho capito, vengono copiate sia le variabili sullo stack che sull' heap?
    E allora se uno ha un processore solo, potrebbe fare:

    codice:
    pid_t pid=fork();
    void* mem=malloc(100);
    cout << mem;
    E ho constatato che stampa due indirizzi uguali.
    Ma allora come fanno ad avere due indirizzi uguali?
    Se puntano alla stessa area di memoria, potrebbero entrare in confilitto?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Gli indirizzi sono virtuali e indipendenti e sono riferiti ad ogni processo.

    L'indirizzo virtuale viene mappato su diversi indirizzi fisici dal sistema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ora è più chiara la cosa, ma ancora non ho capito perchè questa porzione di codice non viene eseguita:

    codice:
        else   // figlio
        {
            cin >> val;
            for(int i=0;i<100;i++)
            {
                mem[i]=5;
                cout << mem[i];
            }
        }
    PS: Il programma termina subito e non posso digitare niente in input.
    Inoltre non stampa nemmeno un valore.

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.