c – 使用alloca时的访问冲突

c – 使用alloca时的访问冲突,第1张

概述我的stackAlloc函数如下所示: void* stackAlloc(size_t size) { if (size > maxStackAllocation) return malloc(size); else return _alloca(size);}void stackAllocFree(void *ptr, size_t size 我的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() \)
解决方法 假设您在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时的访问冲突所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1246545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存