我的stackAlloc
函数长这样:
void* stackAlloc(size_t size) {
if (size > maxStackAllocation)
return malloc(size);
else
return _alloca(size);
}
void stackAllocFree(void *ptr, size_t size) {
if (size > maxStackAllocation) {
free(ptr);
}
}
如果我更改
stackAlloc
函数,始终使用malloc
而不是alloca
,那么一切都可以正常工作。我将该函数更改为一个宏,现在它按预期工作:
#define maxStackAllocation 1024
#define stackAlloc(size) \
( \
(size > maxStackAllocation)? \
malloc(size): \
_alloca(size) \
)
#define stackAllocFree(ptr, size) \
( \
(size > maxStackAllocation)? \
free(ptr): \
void() \
)
maxStackAllocation
的值是多少?我建议您也阅读有关alloca
文档页面上的所有警告。 - Jonathon ReinhartstackAlloc
调用了malloc
,那么stackAllocFree
就会调用free
。没有理由释放使用_alloca
释放的内存。 - Cody GraystackAlloc...
函数。问题不在你在问题中展示的代码中。 - Jabberwocky