foo = (float *)malloc( a * 2 * sizeof(float));
bar = (float *)realloc( foo, a * 2 * sizeof(float));
free( foo ); // oops, foo has gone
В момент, когда вы звоните 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;
Конечно, поскольку это C ++, вам следует избегать malloc
и free
в целом и использовать std::vector<float>
.