スタック上に動的にメモリを確保するには、alloca関数を使います。スタックポインタをずらすだけなので高速にメモリを確保する事ができます。 allocaで確保したメモリは、関数を抜けると自動的に開放されるので、戻り値として返したり、関数の外で使う事ができません。また、 大きなメモリを確保する場合は、スタックオーバーフローにも注意してください。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <locale.h> #include <windows.h> /* スタック上に動的にメモリを確保する */ void funcAlloca ( std::wstring str ) { /* スタック上に動的にメモリを確保する allocaで確保したメモリは関数を抜けると自動的に解放されるので、 戻り値で返したり、関数の外で使う事はできませんので注意してく ださい。 */ WCHAR* wpData = (WCHAR*)alloca( ( str.size() + 1 ) * sizeof( WCHAR ) ); // 確保したメモリに文字列をセット ::wcscpy_s( wpData, str.size() + 1, str.c_str() ); // 表示 std::wcout << wpData << std::endl; } /* スタック上に動的にメモリを確保する */ int _tmain ( int argc , _TCHAR* argv[] ) { /* ロケールを日本に設定 これを設定するだけで、標準出力に日本語が表示される ようになります。 */ setlocale( LC_ALL, "Japanese" ); // スタック上にメモリを動的に確保する funcAlloca( L"スタック上にメモリを動的に確保する" ); // 正常終了 return( 0 ); }
スタック上にメモリを動的に確保する