La mia funzione stackAlloc
simile a questa:violazione di accesso quando si utilizza alloca
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);
}
}
Se cambio così la funzione stackAlloc
utilizzare sempre malloc
invece di alloca
tutto funziona.
ho cambiato la funzione di una macro, e ora il suo lavoro come previsto:
#define maxStackAllocation 1024
#define stackAlloc(size) \
(\
(size > maxStackAllocation)? \
malloc(size): \
_alloca(size) \
)
#define stackAllocFree(ptr, size) \
(\
(size > maxStackAllocation)? \
free(ptr): \
void() \
)
Qual è il valore di 'maxStackAllocation'? Suggerisco di leggere anche tutti gli avvertimenti sulla pagina di documentazione per 'alloca'. –
il suo 1024, alloco solo 124 byte qui – hidayat
http://stackoverflow.com/a/1029951/366904 (dal momento che Vulkan è apparentemente un API C, perché non utilizzare array di lunghezza variabile?) –