電子書籍の厳選無料作品が豊富!

例として、

void MakeMem(double* memData, int size)
{
memData = (double*)VirtualAlloc(0, size * sizeof(double), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
}

このようにしてメモリを確保した場合、関数の外になるとメモリが消えてしまいます。
関数内でメモリを確保する方法ないでしょうか?

質問者からの補足コメント

  • >「メモリが消える」とはどういう現象ですか?
    確保した領域がなくなっています

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/05/11 09:04

A 回答 (5件)

動作確認は行っていませんが、下記で動作すると思います。



void MakeMem(double** memData, int size)
{
*memData = (double*)VirtualAlloc(0, size * sizeof(double), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
}

呼び出し側
double* memData;
MakeMem(&memData, 10);
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2015/05/19 14:45

うん, やっぱり何もわからない. あなたは「消える」とか「なくなる」とか言ってるけど, それがどのような状態であるのか何も書かれていないので, 他人にはまったく通じていないということを理解してほしい.



ということで, #4 にも書かれてるけど
・どのようなプログラムで
・どうなった結果として
「メモリが消える」あるいは「確保した領域がなくなっている」と判断したのか, すべてを公開してください.
    • good
    • 0

あり得ません。

確認に使った方法を教えて下さい。
    • good
    • 1

>メモリが消えてしまいます。


メモリを引っこ抜いたのですか?

>関数内でメモリを確保する方法ないでしょうか?
メモリを引っこ抜かないようにしましょう。
    • good
    • 0

「メモリが消える」とはどういう現象ですか?



まさか,

#include <stdio.h>

void foo(int x)
{
x = 5;
}

int main()
{
int x = 3;
foo(x);
printf("x=%d\n", x);
return 0;
}

というプログラムで 5 が出力されるとか思っていませんか?
この回答への補足あり
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!