Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 50 Pro: design e display al top, meno il prezzo! Recensione
Motorola edge 50 Pro: design e display al top, meno il prezzo! Recensione
Motorola è decisa sulla sua strada: questo nuovo edge 50 Pro non guarda a specifiche stellari ma considera di più l’aspetto estetico. E si propone elegantemente con linee sinuose e un sistema operativo veloce. Peccato per un prezzo un po' fuori mercato.
Ecovacs Goat G1-800, mettiamo alla prova il robot tagliaerba facile ed efficace
Ecovacs Goat G1-800, mettiamo alla prova il robot tagliaerba facile ed efficace
Ecovacs allarga la sua famiglia di robot tagliaerba, ed abbiamo testato per diverse settimane il nuovo Goat G1-800. Installazione velocissima, app precisa, e lavoro infallibile
ASUS ProArt 1, un PC completo ad altissime prestazioni per creator e non solo
ASUS ProArt 1, un PC completo ad altissime prestazioni per creator e non solo
ProArt è un marchio di ASUS che strizza l'occhio a professionisti e creator. Un ecosistema fatto di tanti componenti che si fondono nell'ASUS ProArt 1, un PC assemblato da NEXT in un elegante e ampio case ProArt PA602 al cui interno troviamo un Core i9-14900K raffreddato a liquido (ProArt LC 420) e una GeForce RTX 4080 SUPER piuttosto compatta.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-08-2017, 17:40   #1
pier_dessi
Junior Member
 
Iscritto dal: Aug 2017
Messaggi: 2
[C] Programmino smette di funzionare

Ciao a tutti, sono nuovo del linguaggio C e mi sto cimentando in varie mini-sfide per imparare bene questo linguaggio. Il mio codice dovrebbe calcolare i numeri primi inferiori a 2'000'000 e sommarli tra di loro.
Sto provando a farlo col codice sotto, ma ogni volta che lo faccio partire mi dice che ha smesso di funzionare e non riesco minimamente a capire dove sia il problema.
Se qualcuno mi potrebbe illuminare dandomi dritte su dov'è l'errore gliene sarei grato. Grazie in anticipo


Codice:
Spoiler:
Codice:
#include <stdio.h>
#include <stdlib.h>

int is_prime(int num){
    int *array = NULL;
    int i=0;
    int q=0;

    while(*(array+i)!=NULL || *(array+i)!=0 || *(array+i)!=""){
        if (num%(*(array+i))==0){
            return 0;
        }
        else {
            if(num==(*(array+i)))
                return 0;
            }
        i++;
    }
    array = (int*) realloc(array, (++q)*sizeof(int));
    array[q-1] = num;
    return 1;
}

int main()
{
    int a=2;
    int somma = 0;

    while (a!=2000000){
        if(is_prime(a)){
            somma+=a;
        }
        a++;
    }
    printf("%d",somma);
    return 0;
}
pier_dessi è offline   Rispondi citando il messaggio o parte di esso
Old 07-08-2017, 23:43   #2
pier_dessi
Junior Member
 
Iscritto dal: Aug 2017
Messaggi: 2
Quote:
Originariamente inviato da Bellaz89 Guarda i messaggi
Non riesco a capire molto bene il flusso del programma... Sicuramente l'allocazione e' sbagliata. Ogni volta allochi una stessa dimensione di memoria partendo da NULL e non tieni una reference alla memoria allocata(ergo fai memory leak che e' una meraviglia).

Inoltre il ciclo while utilizza 'array' prima che lo stesso venga allocato. Quindi e' normale che ci sia un segmentation fault.

Consiglio stilistico: sebbene *(array+i) sia equivalente a array[i] e' meglio usare la seconda forma per una questione di chiarezza.

Anche la condizione dello while mi sembra sbagliata.

la condizione *(array+i)!="" e' brutta e priva di significato (stai confrontando il valore di array[i] con il valore del puntatore di "".

Devi fare un po di refactoring mi sa

EDIT1: probabilmente per array e q volevi utilizzare static http://www-ee.eng.hawaii.edu/~tep/EE...on2.1.1.6.html. Ovvero, le variabili allocate nello stack vengono eliminate quando una funzione termina, ergo non e' possibile recuperare il valore che precedentemente avevano a meno di non usare la keyword 'static'

Ti dico comunque che, a meno di casi in cui e' veramente necessario, mettere variabili static nel codice non e' particolarmente bello (anzi e' particolarmente brutto). Considera di usare una struct con lo stato della tua memoria dei numeri primi da passare e aggiornare ogni volta che chiami 'is_prime'
Grazie mille per tutti i consigli, alla fine ho cancellato tutto e ora riprovo, forse è la scelta migliore dopo tutti i difetti che mi hai fatto notare
pier_dessi è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 50 Pro: design e display al top, meno il prezzo! Recensione Motorola edge 50 Pro: design e display al top, m...
Ecovacs Goat G1-800, mettiamo alla prova il robot tagliaerba facile ed efficace Ecovacs Goat G1-800, mettiamo alla prova il robo...
ASUS ProArt 1, un PC completo ad altissime prestazioni per creator e non solo ASUS ProArt 1, un PC completo ad altissime prest...
OPPO Reno11 F 5G: vuole durare più di tutti! La recensione OPPO Reno11 F 5G: vuole durare più di tut...
DJI Avata 2: il drone FPV accessibile ancora più sicuro e divertente DJI Avata 2: il drone FPV accessibile ancora pi&...
HUAWEI dice addio alla storica serie P. ...
Star Wars Outlaws: i giocatori incontrer...
Vulnerabilità grave su iMessage: ...
Arriva Insta360 X4 per realizzare veri v...
AMD presenta i Ryzen PRO 8000: sono megl...
Iliad: la prima offerta fibra in Italia ...
La California stabilisce un nuovo record...
Steam FPS Fest: un'altra settimana di sc...
CATL, ecco il primo sistema di accumulo ...
SteganoAmor, la campagna malware che nas...
NASA: il detrito spaziale caduto in Flor...
Maserati presenta la GranCabrio Folgore:...
Galaxy AI arriverà anche su Galax...
Motorola annuncia la nuova serie edge 50...
Super offerta per l'Hard Disk esterno Se...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www2v