calloc 引发总线错误
//前两个都成功了分配空间了,第三个就出了总线错误,不知为何。
#include <stdio.h>
#include <malloc.h>
void some_function(size_t size)
{
int i;
printf( "程序执行检查点 3 ");fflush(NULL);
char *pointer;
char stack_fix[1];
stack_fix[0] = NULL;
printf( "程序执行检查点 4 ");fflush(NULL);
if ((pointer = (char *)calloc(1, sizeof(size))) == NULL) //这里有问题
printf( "Error allocating %u bytes from the stack\n ", size);
else
{
printf( "程序执行检查点 5,这个第三遍没有执行到 ");fflush(NULL);
for (i = 0; i < size; i++)
pointer[i] = i;
printf( "Allocatd and used a buffer of %u bytes\n ", size);
}
}
int main(void)
{
some_function(1000);
printf( "程序执行检查点 1 ");fflush(NULL);
some_function(320);
printf( "程序执行检查点 2 ");fflush(NULL);
some_function(65);
}
[解决办法]
if ((pointer = (char *)calloc(1, sizeof(size))) == NULL) //这里有问题
-------------------------------------
你的size是不是等于1000, 320, 65?这已经是一个具体的值了,干吗还要用sizeof (size)呢?画蛇添足了。
if ((pointer = (char *)calloc(1, size) == NULL) //这样就行了
[解决办法]
如果是具体值的话, 那么非常危险
sizeof(123)=4 因为123的;类型是会被认为是int ,所以占4字节
[解决办法]
calloc 是不会引发总线错误
calloc(1, sizeof(size)) 对size分配错误理解
导致你后面分配数目不匹配,赋值超出分配的限度
所以导致益处
[解决办法]
if ((pointer = (char *)calloc(1, sizeof(size))) == NULL) //
sizeof是取的对象所占的空间大小,sizeof(size)的值可能为4,8,这句是你分配了4或则8个字节的空间
而你下边要用到的大小是size个,这样就有可能出错了,如果你的参数size的值小于4或则8,则不会出错,
否则,要内存溢出了.
4或则8,系统不同而不同.