Joh*_*Ace 8 c++ memory visual-c++
我正在尝试释放重新分配的内存但我收到错误...
float * foo = NULL;
float * bar = NULL;
void update()
{
...
foo = (float *)malloc( a * 2 * sizeof(float));
...
bar = (float *)realloc( foo, a * 2 * sizeof(float));
...
free( foo );
...
// when i do
if(bar != NULL)
{
free(bar); // <-- error at executing
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:http://d.pr/mpBF和visual studio向我显示以下文件:
osfinfo.c
=========
void __cdecl _unlock_fhandle (
int fh
)
{
LeaveCriticalSection( &(_pioinfo(fh)->lock) );
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
foo = (float *)malloc( a * 2 * sizeof(float));
bar = (float *)realloc( foo, a * 2 * sizeof(float));
free( foo ); // oops, foo has gone
Run Code Online (Sandbox Code Playgroud)
在您调用时free(foo),foo它是无效的,因为它在您调用时已经被释放realloc.
代码应该像这样的伪代码:
foo = (float *)malloc( a * 2 * sizeof(float));
if (foo == NULL)
return ERROR_CODE;
...
bar = (float *)realloc( foo, a * 2 * sizeof(float));
if (bar == NULL)
{
free(foo);
return ERROR_CODE;
}
...
free(bar);
return SUCCESS;
Run Code Online (Sandbox Code Playgroud)
当然,因为这是C++,你应该避免malloc并free完全使用std::vector<float>.
当您重新分配内存时,不应释放旧内存。
bar = (float *)realloc( foo, a * 2 * sizeof(float));
free( foo ); // <-- this is wrong
Run Code Online (Sandbox Code Playgroud)
你要:
float * foo = NULL;
void update()
{
...
foo = (float *)malloc( a * 2 * sizeof(float));
...
float * bar = (float *)realloc( foo, a * 2 * sizeof(float));
if(bar)
foo = bar;
...
free(foo);
}
Run Code Online (Sandbox Code Playgroud)