onunix 2023-11-12 14:32 采纳率: 77.8%
浏览 3
已结题

请问这里为什么没有内存错误


typedef struct{
    int *base;
    int front;
    int rear;
}Sqqueue;
Sqqueue Que;
 
void Initqueue(Sqqueue& Que)  
{
    Que.base=(int*)malloc(sizeof(int));
    Que.front=Que.rear=0;
}
 
void Enqueue(Sqqueue &Que, int e)  
{ 
       Que.base[Que.rear]=e;
    Que.rear=Que.rear+1;
} 
 
int Dequeue(Sqqueue &Que)//出队列 
{
    int e;    
    e=Que.base[Que.front];
    Que.front=Que.front+1;
    return e;
}

请问一下,这个先进先出队列中,内存分配Que.base=(int*)malloc(sizeof(int))是否分太少了,从这句看,Que.base[Que.rear]=e;Que.base实际是一块连续的空间,存储多个int类型的数据,但是这里Que.base=(int*)malloc(sizeof(int))只分配了4个字节(一个int类型的存储空间即4个字节的空间),那应该运行中会出现内存错误啊,但是实际运行没有错误,请问是什么原因?

  • 写回答

4条回答 默认 最新

  • 关注

    你是对的,确实会出现内存错误。但是在编译的时候是无法发现的,并且,如果Queue中如果只有1个元素时,也不会报错,只有当数据2个以上后,访问Queue时才可能会报错。编译器并不能及时发现这种内存错误,因为编译器无法区分这种操作是程序猿有意的还是无意的,只有在内存访问发生冲突以后,才会报错。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月12日