首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

calloc 引发总线异常

2012-02-26 
calloc 引发总线错误//前两个都成功了分配空间了,第三个就出了总线错误,不知为何。#includestdio.h#inclu

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,系统不同而不同.

热点排行