配列の呼び出し用の領域を割り当てます。これはdouble型の(2 * n + 1)要素を持ちます。私は配列を作成し、最後にfree()します。しかし私がfree()を使うと、 "double free or corruption(out):0x0000000000000f1dc20"というエラーが出ます。私がfree()にコメントすると、コードが実行されます。私は問題を見つけることができません。C++のmalloc()の後にfree()が呼び出された場合のエラー
using namespace std;
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
long n=512; //grid size
double *test;
int main()
{
test = (double*) malloc(sizeof(double) * (2*n+1));
for (long j=-n;j<=n;j++)
{
test[j] = double(j);
}
free(test); //<--- gives me error if I use this
return 0;
}
これはcとC++の混合です。 C++では 'malloc'と' free'の代わりに 'new'と' delete'を使うべきです。それでも、コンテナと 'std :: make_unique'や' std :: make_shared'を 'new' /' delete'より優先します。さらに、cヘッダは '#include'の代わりに '#include 'のような接頭辞cを使ってインクルードされます。 –
ここでは、負のインデックスを使用することはできません。 –
C++では 'malloc' /' free'を避けるべきです。 'new' /' delete'は手動メモリ割り当てのためのC++の方法です。つまり、 'std :: vector'、' std :: unique_ptr'、または 'std :: shared_ptr'が望ましいはずです。 – NathanOliver