2016-12-03 2 views
-4

Ich deklariere mpz Variablen und initialisiere sie in einer void Funktion.Segmentierungsfehler (core dumped) in C (mit GMP lib)

Es funktioniert nicht.

Zum Beispiel:

mpz_t a; 
init(); 
    ... 
void init(){ 
    mpz_init(a); 
    .... 
} 

kein Fehler.

init(); 
    ... 
    void init(){ 
     mpz_t a; 
     mpz_init(a); 
    } 

Ein Fehler tritt auf.

+3

Können Sie bitte versuchen, ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und uns zu zeigen? Und hast du versucht, in einem Debugger zu laufen, um den Absturz in Aktion zu erfassen und zu sehen, wo es in deinem Code passiert? –

+2

Jedes Mal, wenn ein Fehler auftritt, ist es wichtig genau zu wissen, was die Fehlermeldung _says_ bedeutet. – Chris

Antwort

0

Von dem kleinen Code, den Sie haben, scheint der Unterschied der Umfang der Variablen a zu sein. Was ist der Punkt, mpz_init(a) auf eine Variable mit nur lokalen Bereich (innerhalb Ihrer init() Funktion) aufzurufen? Nach init() kehrt zurück, a verschwindet. Wenn Sie es später für etwas anderes benötigen, wird die Variable a und vermutlich einige der Nebenwirkungen von mpz_init() nicht existieren. Wenn Sie wollen, dass die Nebenwirkungen von mpz_init() über das Ende von init() hinaus bestehen bleiben, muss es auf einige Strukturen wirken, die auch nach dem Ende von init() bestehen bleiben. In Ihrem ersten Beispiel wird a mit globalem Gültigkeitsbereich deklariert, so dass es für die Gesamtheit Ihres Programms fortbesteht.

Verwandte Themen