拾叁。。。 2022-06-11 20:39 采纳率: 100%
浏览 60
已结题

为什么用malloc函数规定分配的大小没有用?

img

img


代码如下:#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"
#define LIST_INIT_SIZE 3//线性表的初始容量
#define LIST_INCREMENT 5//每次增加的长度

typedef struct //定义结构体
{
int *elem;//基址
int length;//线性表长度
int listSize;//当前已经分配的储存容量
}SqList;

int SqListInit(SqList &list)//初始化
{
list.elem=(int *)malloc(3 * sizeof(int));
list.length=0;
list.listSize=LIST_INIT_SIZE;

return 1;//初始化成功返回一

}

void insertList(SqList &list)
{
int i;
int x;
for(list.length;;)
{
printf("请输入一个值: ");
scanf("%d",&list.elem[list.length]);
list.length++;
getchar();
printf("【继续按:1,退出按:2】: ");
scanf("%d",&x);
if(x==2)
break;
}

 printf("输入成功!\n");
 return;

}

void cx(SqList &list)
{
int i;
for(i=0;i<list.length;i++)
printf("%d\t",list.elem[i]);
printf("\n");

return;

}

int main()
{

SqList list;

SqListInit(list);
insertList(list);
cx(list);

return 0;

}

  • 写回答

5条回答 默认 最新

  • 暴风雨中的白杨 2022-06-11 21:16
    关注

    malloc 是在堆区分配内存, 好像就会存在这种越界的情况

    int main(){
        int a = 1;
        int * p = (int*)malloc(sizeof(int)); 
        
        printf("越界读取: "); 
        printf("%d\r\n",*(p+1));
        printf("越界操作\r\n");
        *(p+1) = 2;
        printf("%d\r\n",*(p+1));
        
        return 0;
    }
    

    栈区分配内存, 好像可以越界读,但是不能越界写

    int main(){
        int a = 1;
        int * p = &a; 
        
        printf("越界读取: "); 
        printf("%d\r\n",*(p+1));
        printf("越界操作\r\n");
        *(p+1) = 2;
        printf("%d\r\n",*(p+1));
        
        return 0;
    }
    

    以上两个 程序可以运行 体会一下

    可以手动 判断 length 的长度 解决

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

报告相同问题?

问题事件

  • 系统已结题 6月19日
  • 已采纳回答 6月11日
  • 赞助了问题酬金5元 6月11日
  • 创建了问题 6月11日

悬赏问题

  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私