鱼C论坛

 找回密码
 立即注册
查看: 1483|回复: 6

[已解决]C++新手,用的VS2017,不知道为什么报这个错,望各位大牛帮帮忙!谢谢

[复制链接]
发表于 2019-8-10 23:27:11 | 显示全部楼层 |阅读模式
6鱼币
C++新手,用的VS2017,不知道为什么报这个错,望各位大牛帮帮忙!谢谢

以下是程序源码:
#include "pch.h"
#include <iostream>

int main()
{
        int count = 0;
        int *pNum = new int[count];
        int  num;
       
        std::cout << "请输入元素的个数" << std::endl;

        while (!(std::cin >> count) || (count < 1))
        {
                std::cin.clear();//清除数据格式
                std::cin.ignore(100, '\n');//清除缓存
                std::cout << "请输入元素的个数" << std::endl;
        }       
        std::cin.ignore(100, '\n');

        //输入数组里元素的内容
        for (int i = 0; i < count; ++i)
        {
                std::cout << "请输入第" << i + 1 << "的元素的值" << "\n";

                while (!(std::cin >> num))
                {
                        std::cin.clear();//清除数据格式
                        std::cin.ignore(100, '\n');//清除缓存
                        std::cout << "请输入第" << i + 1 << "的元素的值" << "\n";
                }
                std::cin.ignore(100, '\n');
                pNum[i] = num;
        }
        //打印数组内容
        for (int i = 0; i < count; ++i)
        {
                std::cout << pNum[i] << "\n";
        }
       
        return 0;
}
最佳答案
2019-8-10 23:27:12
简单说一下,你申请数组空间的时候弄错了。int *pNum = new int[count];应该放在 “//输入数组里元素的内容”这个位置。不然你后面赋值的时候实际上越界了。
error.png

最佳答案

查看完整内容

简单说一下,你申请数组空间的时候弄错了。int *pNum = new int[count];应该放在 “//输入数组里元素的内容”这个位置。不然你后面赋值的时候实际上越界了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-10 23:27:12 | 显示全部楼层    本楼为最佳答案   
简单说一下,你申请数组空间的时候弄错了。int *pNum = new int[count];应该放在 “//输入数组里元素的内容”这个位置。不然你后面赋值的时候实际上越界了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-10 23:29:38 | 显示全部楼层
但是也偶尔有一两次不报错的情况!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-11 10:54:06 | 显示全部楼层
灰色的天空 发表于 2019-8-10 23:56
简单说一下,你申请数组空间的时候弄错了。int *pNum = new int[count];应该放在 “//输入数组里元素的内容 ...

你好,我试了一下,确实不再报错了。能不能麻烦解释一下为什么在开头申请动态数组会越界,在后面申请就没有这个问题?麻烦了。非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-11 11:00:29 | 显示全部楼层
风羽.Song 发表于 2019-8-11 10:54
你好,我试了一下,确实不再报错了。能不能麻烦解释一下为什么在开头申请动态数组会越界,在后面申请就没 ...

哦我知道了,是不是刚开始count变量初始化为0,所以刚开始申请的数组的长度就为0?后面调用pNum[1]、[2]的时候就算越界?但是用new申请的空间是在堆里面申请的,在内存池里面申请的,在程序运行的过程中可以手动增加的,既然count是的变量的话,那count的大小是可以重新的赋值的,是否在改变count大小之后还需要做什么操作才能手动增加数组长度?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-11 14:15:25 From FishC Mobile | 显示全部楼层
直接重新分配的话需要用C语言的malloc申请空间, realloc重新分配空间。而new的话你只有先申请另外长度的新空间然后memcpy把原来的空间的值赋值进入。最后delete [] p 释放原来的数组空间,p=null.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-11 17:59:08 | 显示全部楼层
灰色的天空 发表于 2019-8-11 14:15
直接重新分配的话需要用C语言的malloc申请空间, realloc重新分配空间。而new的话你只有先申请另外长度的新 ...

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 03:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表