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() \)解决方法 假设您在windows上运行,因为您的代码根据 MSDN documentation调用_alloca():
_alloca allocates size bytes from the program stack. The allocated space is automatically freed when the calling function exits
请注意,当调用函数退出时,内存被释放 – 我假设这也意味着调用函数返回.
你的代码:
voID* stackalloc(size_t size) { if (size > maxstackallocation) return malloc(size); else return _alloca(size);}
返回,从而释放通过_alloca()获得的内存.
总结以上是内存溢出为你收集整理的c – 使用alloca时的访问冲突全部内容,希望文章能够帮你解决c – 使用alloca时的访问冲突所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)