         mpz_clear(gmp_bignum_c);
     }
 
-    free(host_a);
-    free(host_b);
-    free(host_c);
-
-    if(results_correct)
+    if (results_correct)
     {
         printf("all correct\n");
     }

    cudaMemcpy(dev_b, host_b, NUMBER_OF_TESTS * sizeof(bignum),
               cudaMemcpyHostToDevice);

    test_kernel<<<1, 1>>>(dev_c, dev_a, dev_b);

    // copy results back to host
    cudaMemcpy(host_c, dev_c, NUMBER_OF_TESTS * sizeof(bignum),

    }
}

__global__ void normal_addition(bignum* dev_c, bignum* dev_a, bignum* dev_b)
{
    for (int i = 0; i < NUMBER_OF_TESTS; i++)
    {
