为什么程序用alloca分配40800000个字节的空间后会出现段错误?而malloc则没事。
是不是alloca分配空间有什么限制?
[解决办法]
alloca
Allocates memory on the stack
栈的大小是有限制的,所以过大的话会错误的。
[解决办法]
The alloca function allocates size bytes of space in the stack frame of the caller.
楼上正解.
才知道,我一直以为在堆区.
[解决办法]
标准的动态内存分配函数只有malloc calloc realloc,
而且在使用动态内存分配之后都应该有一句检测语句比如 if ((ptr = (int *) malloc (sizeof(int)*100)) == NULL) return 0;
[解决办法]
你是怎么检测的?把代码贴出来看一下
[解决办法]
alloca出错是用异常处理的。
__try{
void *p = alloca(0xffffffff);
}
__except (GetExceptionCode() = STATUS_STACK_CODE) {
print ( "alloca failed!\n ");
}
[解决办法]
void *temp = (void *)alloca (nmemb * size * sizeof (void *));
if (temp)
------------------------
if (temp == NULL)
{
pritnf ( "内存分配失败!退出程序\n ");
return 0;
}
else
mergesort_internal (base, temp, size, 0, nmemb - 1, cmpfun);
[解决办法]
用 _alloca更好一些
[解决办法]
alloca 这个是栈上的,大小跟编译器有关吧
用 malloc 咯
[解决办法]
学了一招的
[解决办法]
alloca函数
还有一个函数也值得一提,这就是alloca。其调用序列与malloc相同,但是它是在当前函数的栈帧上分配存储空间,而不是在堆中。其优点是:当函数返回时,自动释放它所使用的栈帧,所以我们就不必再为释放空间而费心。其缺点是某些系统在函数已被调用后不能增加栈帧长度,于是也就不能支持 alloca函数。尽管如此,很多软件包函是使用alloca函数,也有很多系统支持它。
为什么程序用alloca分配40800000个字节的空间后会出现段异常?而malloc则没事
为什么程序用alloca分配40800000个字节的空间后会出现段错误?而malloc则没事。是不是alloca分配空间有什么
