Christopher Janzon
Christopher Janzon

Reputation: 1039

GMP mpz_class array not usable?

I want to dynamically allocate a mpz_class array.

mpz_class *arr = new mpz_class[10];

This line gives me error:

for(mpz_class i=0; i<10; i++) arr[i]=0;

It says that i can't have a mpz_class inside arr[]. Why? What if i want to allocate a really big array? Do I have to use i.get_ui()?

Upvotes: 0

Views: 1627

Answers (2)

Christopher Janzon
Christopher Janzon

Reputation: 1039

To use an arbitrary precision integer as an array index is useless because memory location pointers are limited to the machine's amount of memory and it's CPU's highest integer standard, which today those are 32 or 64 bit.

Classes can not be used as a array index.

If you have to use the value stored in a mpz_class as an array index, then just use mpz_class::get_ui(); to return the value as an unsigned int.

Example:

mpz_class size = 10;
mpz_class *arr = new mpz_class[size.get_ui()];
for(mpz_class i=0; i<size.get_ui(); i++) arr[i.get_ui()] = 0;
delete[size.get_ui()] arr;

Upvotes: 1

Mahesh
Mahesh

Reputation: 34615

for(mpz_class i=0; i<10; i++) arr[i]=0;
  // ^^^^^^^^ int ?

Didn't you mean int type for the iteration variable i ?

Also, why are you doing arr[i] = 0; ? This will loose the memory location it was earlier pointing to acquired through new[] and causes the memory leak.

Upvotes: 0

Related Questions