私は、多くのボタンを備えた多くのメニューを含む SFML を使用したプロジェクトに取り組んでいるため、最小限の入力でこれらのボタンを自動的に作成およびフォーマットする関数を作成しています。関数が既に構築されたボタンをパラメーターとして呼び出したときに、これはうまく機能しましたが、これを単純化して、ボタンを構築するために使用される文字列を取りたいと思います。これはベクトルに格納されます。これを実行しようとすると、次のエラーが発生しました。
Unhandled exception at 0x76a7c41f in Menu.exe: Microsoft C++ exception:
std::bad_alloc at memory location 0x003cd0a0..
そして、私はdbgheap.cでこれを指摘しています:
for (;;)
{
/* do the allocation
*/
here>>> pvBlk = _heap_alloc_dbg_impl(nSize, nBlockUse, szFileName, nLine, errno_tmp);
if (pvBlk)
{
return pvBlk;
}
if (nhFlag == 0)
{
if (errno_tmp)
{
*errno_tmp = ENOMEM;
}
return pvBlk;
}
/* call installed new handler */
if (!_callnewh(nSize))
{
if (errno_tmp)
{
*errno_tmp = ENOMEM;
}
return NULL;
}
/* new handler was successful -- try to allocate again */
}
ここに私のコードと私が変更したものがあります。
この関数はエラーを出しません:
void page::addLeft(int n, ...)
{
va_list left;
va_start(left, n);
for (int i = 0; i < n; i++)
{
leftButtons.push_back(va_arg(left, button));
//takes parameters of type "button", a working custom class
}
va_end(left);
}
この関数は、未処理の例外を与えます: std::bad_alloc
void page::addLeft(int n, ...)
{
va_list left;
va_start(left, n);
for (int i = 0; i < n; i++)
{
std::string s = va_arg(left, std::string);
//takes a parameter of type "string" and uses it in the default constructor
//of button. the default constructor for button works.
leftButtons.push_back(button(s));
}
va_end(left);
}
私は SFML に非常に慣れていませんが、それが問題だとは思いません。ありとあらゆる助けをいただければ幸いです。