0

malloc を使用しているときに、割り当てられたポインターが null であることに気付きました。コードの実行中に、ヒープ メモリに 30 MB 前後のメモリをさらに多く割り当てたいと考えています。GCC 4.6.3 をコンパイラとして使用する Ubuntu 12.04 LTS でこれを行うにはどうすればよいですか? 代わりに、より多くのスタック メモリを割り当てる必要がありますか? それは良いでしょうか?

ありがとう

コードの問題部分を編集します。コードは if ステートメントの後で終了します。

#include <stdio.h>
#include <math.h>
#include <limits.h>
#include <stdlib.h>
#define a0 0.53 
#define N LONG_MAX
// This value of N is the highest possible number in long double
// data format over 100. Higher is not possible due to the size of 
// the default heap memory. Change its value  to adjust the precision of 
// integration and computation time. Since exponential decays really fast
// a modest value of N is enough for this integration.
// The discrete integral may be defined as follows:
long double trapezoid(long double x[],long double f[]) {
  int i;
  long double dx = x[1]-x[0];
  long double sum = 0.5*(f[0]+f[N]);

    for (i = 1; i <  N; i++) 
        sum+=f[i];
  return sum*dx;  
}
main() {
    printf("LONG_MAX constant has the following value: %ld \n", LONG_MAX);
    long double * P = malloc(N * sizeof(long double));
    long double * r = malloc(N * sizeof(long double));
    long double * PP = malloc(N * sizeof(long double));
    // The if statement is to check if the memory allocation has 
    // been done and terminate the program otherwise.
    if (P == 0 || r == 0)
        {
            printf("ERROR: Out of memory\n");
            return 1;
        }
    // Declare and initialize the loop variable
}
4

0 に答える 0