Wenn ich ein großes Array verwenden möchte, z. B. mpz_t A [100000], wurde während der Kompilierung "Segmentierungsfehler (Core Dumped)" angezeigt. Gibt es einen einfacheren Weg, dies zu lösen?
Wenn ich ein großes Array verwenden möchte, z. B. mpz_t A [100000], wurde während der Kompilierung "Segmentierungsfehler (Core Dumped)" angezeigt. Gibt es einen einfacheren Weg, dies zu lösen?
Antworten:
Der Kommentar von tpg2114 ist genau richtig. Versuchen:
/* at top */
#include <stdlib.h>
/* definition */
mpz_t *A;
/* initialization of A */
A = (mpz_t *) malloc(100000 * sizeof(mpz_t));
if (NULL == A) {
printf("ERROR: Out of memory\n");
return 1;
}
/* no longer need A */
free(A);
Wenn der malloc
Aufruf hier einen Fehler auslöst, ist in Ihrem System nicht genügend Speicher verfügbar.
Wenn Sie ein statisches Array auf dem Stapel verwenden möchten, können Sie versuchen, die Stapelbegrenzungsgröße unter Linux mit dem ulimit
Befehl zu erhöhen .
free(A)
Beispiel!
Sie können auch die Verwendung mpz_class
in C ++ ( Ref .) Statt in Betracht ziehen mpz_t
. Es kann eine Arithmetik mit beliebiger Genauigkeit einfach machen.
Hier ist ein zufälliges Beispiel:
#include <gmp.h>
#include <gmpxx.h>
#include <iostream>
using namespace std;
int main() {
mpz_class A[100000];
for(int i=0;i<100000;i++) A[i]=142412+i;
for(int i=0;i<100000;i++) cout << i << " " << A[i] << endl;
return 0;
}
Zusammengestellt mit zB:
g++ [[filename]] -lgmp -lgmpxx