m0_50998276 2022-07-07 10:07 采纳率: 100%
浏览 33
已结题

申请动态内存时puts报错

问题遇到的现象和发生背景

为什么会这样,使用的是软件是 vs2022

问题相关代码,请勿粘贴截图

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
int i;
scanf("%d", &i);
char* p;
p = (char*)malloc(i);
char c;
scanf("%c", &c);//去除缓冲区内的\n 上面一个scanf输入的是 10\n 只会读取走10 留下\n
gets(p);
puts(p);
return 0;

}

运行结果及报错内容

0x00007FFC4F88F130 (ucrtbased.dll)处(位于 Project2.exe 中)引发的异常: 0xC0000005: 写入位置 0xFFFFFFFFDD29FB00 时发生访问冲突。

我的解答思路和尝试过的方法
我想要达到的结果

学习malloc

  • 写回答

4条回答 默认 最新

  • qzjhjxj 2022-07-07 10:32
    关注

    供参考:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int i;
        scanf("%d", &i);
        char* p;
        p = (char*)malloc(sizeof(char) * i);
        char c;
        scanf("%c", &c);//去除缓冲区内的\n 上面一个scanf输入的是 10\n 只会读取走10 留下\n
        gets(p);
        puts(p);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月15日
  • 已采纳回答 7月7日
  • 创建了问题 7月7日