RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 805662
Accepted
ImmRaytal
ImmRaytal
Asked:2020-03-28 04:15:31 +0000 UTC2020-03-28 04:15:31 +0000 UTC 2020-03-28 04:15:31 +0000 UTC

C++ 内存或语法错误

  • 772

晚上好。我正在编写一个程序代码,该代码应该具有 AEROFLOT 结构类型数组的输入和输出函数。适用于一次航班。不带两个。胡说八道,我认为它会导致一段不存在的记忆。但我不明白为什么。同时我请你分析代码。我释放了内存是真的吗?我还想将这些功能推入一个结构中。也许有人会建议怎么做?

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <iomanip>
using namespace std;
struct AEROFLOT
{
public:
char Trip[20];      //номер рейса
char Departure[30];  // пункт отправления
char Destination[30];  //пункт назначения
char Type[30];  //тип самолёта
float   Time; //Время в пути
};
AEROFLOT set(int k);
void out(AEROFLOT *n, int k);
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int k, check;

cout << "Введите кол-во рейсов" << endl;
cin >> k;
AEROFLOT * n = new AEROFLOT[k];
*n = set(k);


while (1)
{
    cout << "1. Ввод информации" << endl;
    cout << "2. Вывод информации по всем рейсам" << endl;
    cout << "3. Выход" << endl;
    cin >> check;
    switch (check)
    {
    case 1:
    {
        cout << "Введите новое кол-во рейсов" << endl;
        cin >> k;
        AEROFLOT * n = new AEROFLOT[k];
        *n = set(k);
        break;
    }
    case 2:
    {
        system("cls");
        out(n, k);
        break;
    }
    case 3:
    {
        delete n;
        return 0;
    }

    default: cout <<endl<< "Неверный ввод! Повторите. " << endl;
        cout << endl;
        break;
    }   
}
return 0;
}
AEROFLOT set(int k)
{
AEROFLOT *n = new AEROFLOT[k];
for (int i = 0; i < k; i++)
{
    cout << "Введите номер "<<i+1<< "-го рейса: " << endl;
    cin >> n[i].Trip;
    cout << "Введите пункт отправления " << i+1 << "-го рейса: " << endl;
    cin >> n[i].Departure;
    cout << "Введите пункт назначения " << i+1 << "-го рейса: " << endl;
    cin >> n[i].Destination;
    cout << "Введите тип самолёта " << i+1 << "-го рейса: " << endl;
    cin >> n[i].Type;
    cout << "Введите время в пути(мин) " << i+1 << "-го рейса: " << endl;
    cin >> n[i].Time;
}
system("cls");
return *n;
}
void out(AEROFLOT *n, int k)
{
for (int i = 0; i < k; i++)
{
    cout << "___________________________________________" << endl;
    cout << "|Номер рейса:       |"<< setw(20) << n[i].Trip<<" |"<< endl;
    cout << "___________________________________________" << endl;
    cout << "|Пункт отправления: |"<< setw(20) << n[i].Departure <<" |"<< 
endl;
    cout << "___________________________________________" << endl;
    cout << "|Пункт назначения:  |"<< setw(20) << n[i].Destination<< " |"
<<endl;
    cout << "___________________________________________" << endl;
    cout << "|Тип самолёта:      |"<< setw(20) << n[i].Type <<" |"<< endl;
    cout << "___________________________________________" << endl;
    cout << "|Время в пути:      |"<< setw(16) << n[i].Time<<" мин"<<" |" << 
endl;
    cout << "___________________________________________" << endl;
    cout << endl;       
}
system("pause");
system("cls");
}
c++
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. user7860670
    2020-03-28T04:41:11Z2020-03-28T04:41:11Z

    AEROFLOT set(int k)返回单个结构而不是指向这些结构数组的指针,该数组在函数中分配(和丢失)。因此,赋值*n = set(k);仅复制数组中的第一个元素(不应在此处分配,因为它已在函数中分配),其余元素包含垃圾。此外,正在创建的局部变量会AEROFLOT * n = new AEROFLOT[k];掩盖同名变量,并且第一个数组会留下垃圾。将指向先前分配的数组的指针传递给您的函数。

    • 1
  2. Best Answer
    ImmRaytal
    2020-03-28T21:54:51Z2020-03-28T21:54:51Z

    AEROFLOT *通过循环删除解决了这个问题。因为 AEROFLOT *创建一个新的,不同于以前的变量。因此,没有所需数组的输出。现在旧变量在程序中被编辑,它也被显示出来。

    switch (check)
        {
        case 1:
        {
            cout << "Введите новое кол-во рейсов" << endl;
            cin >> k;
            delete[] n;
            n = new AEROFLOT[k];
            *n = set(n, k);
            break;
        }
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5