C++ C++;代码断断续续,为了我的爱,我可以';我修不好
基本上,我的代码应该从用户那里获取关于马拉松赛跑者的信息,然后显示3个最佳时间,并且能够搜索和显示任何跑步者。现在,代码仍然是非常简单的,但是它至少应该接受输入,以升序排列信息(赢家功能),并且当我决定编译代码进行测试时,我正处于显示函数的中间,然后它全部下山。 基本上,当我必须输入第一个跑步者的名字时,代码分成以下几行:C++ C++;代码断断续续,为了我的爱,我可以';我修不好,c++,compiler-errors,line-breaks,C++,Compiler Errors,Line Breaks,基本上,我的代码应该从用户那里获取关于马拉松赛跑者的信息,然后显示3个最佳时间,并且能够搜索和显示任何跑步者。现在,代码仍然是非常简单的,但是它至少应该接受输入,以升序排列信息(赢家功能),并且当我决定编译代码进行测试时,我正处于显示函数的中间,然后它全部下山。 基本上,当我必须输入第一个跑步者的名字时,代码分成以下几行: static void __CLRCALL_OR_CDECL assign(_Elem& _Left, const _Elem& _Right) _NOEXC
static void __CLRCALL_OR_CDECL assign(_Elem& _Left, const _Elem& _Right) _NOEXCEPT
{ // assign an element
_Left = _Right;
}
首先,我不知道这意味着什么,也不知道为什么left=right,其次,一个朋友在他的机器上运行了我的代码,告诉我他没有遇到错误
这是我的密码:
#include <iomanip>
#include <iostream>
#include <math.h>
#include <string>
using namespace std;
#pragma once
#include <string>
using namespace std;
class race
{
private:
public:
int timeH, timeM, timeS, timeT;
int number;
string name;
void input();
};
int size;
race *runner = new race[size];
void input();
void winners();
void display();
int main(){
input();
winners();
display();
system("pause");
}
void input(){
cout << "Indique la cantidad de corredores: ";
cin >> size;
for (int i = 0; i < size; i++){
cout << "Nombre del corredor ";
cin >> runner[i].name;
cout << "Numero del corredor # "<<i;
cin >> runner[i].number;
cout << "Tiempo del corredor # " << i << endl << "Indique cuantas horas tardo :";
cin >> runner[i].timeH;
runner[i].timeH = runner[i].timeH * 3600;
cout << "Cuantos minutos: ";
cin >> runner[i].timeM;
runner[i].timeM = runner[i].timeM * 60;
cout << "Cuantos segundos: ";
cin >> runner[i].timeS;
runner[i].timeT = runner[i].timeH + runner[i].timeM + runner[i].timeS;
}
}
void winners(){
race temp;
int flag = 1;
for (int j = 1; (j <= size) && flag; j++){
flag = 0;
for (int i = 0; i < size-1; i++){
if (runner[i + 1].timeT < runner[i].timeT)
{
temp = runner[i];
runner[i] = runner[i + 1];
runner[i + 1] = temp;
flag = 1;
}
}
}
}
#包括
#包括
#包括
#包括
使用名称空间std;
#布拉格语一次
#包括
使用名称空间std;
阶级竞赛
{
私人:
公众:
int timeH,timeM,timeS,timeT;
整数;
字符串名;
无效输入();
};
整数大小;
比赛*跑步者=新比赛[尺码];
无效输入();
无效赢家();
void display();
int main(){
输入();
优胜者();
显示();
系统(“暂停”);
}
无效输入(){
大小;
对于(int i=0;irunner[i]。名称;
问题是:
int size;
race *runner = new race[size];
未初始化的全局变量是零初始化的,因此size
将被初始化为零,因此您正在分配一个零大小的数组,这意味着对该数组的任何访问都将是越界的,并导致错误
有两种解决方法:
等待分配,直到您知道大小。(不是我推荐的解决方案。)
使用动态大小的“数组”类型(我推荐的解决方案)
问题是:
int size;
race *runner = new race[size];
未初始化的全局变量是零初始化的,因此size
将被初始化为零,因此您正在分配一个零大小的数组,这意味着对该数组的任何访问都将是越界的,并导致错误
有两种解决方法:
等待分配,直到您知道大小。(不是我推荐的解决方案。)
使用动态大小的“数组”类型(我推荐的解决方案)
这是一个问题。您正在分配内存,但尚未设置size
(该分配在调用main()
之前运行)。这意味着您正在进行newrace[0]
(因为size
初始化为零,因为它是全局int
).Ergo,程序的其余部分正在调用未定义的行为,因为runner
是一个空数组,您正试图(非法)访问它
您也在泄漏内存,因为您从未删除[]
使用new[]
分配的内存。我建议使用std::vector
这是一个问题。您正在分配内存,但尚未设置size
(该分配在调用main()
之前运行)。这意味着您正在进行newrace[0]
(因为size
初始化为零,因为它是全局int
).Ergo,程序的其余部分正在调用未定义的行为,因为runner
是一个空数组,您正试图(非法)访问它
您也在泄漏内存,因为您从未删除[]
使用new[]
分配的内存。我建议使用std::vector,并在代码中的何处“中断”?问题很可能不在库代码中,而是在您的代码中,因此请按照调用堆栈查找您的代码,并告诉我们该代码在何处(请编辑您的问题以执行此操作)。cin>>size;
您不认为获取大小有点太晚了吗?您已经为您的race
数组分配了0个元素。在您的代码中,“中断”在哪里?问题很可能不在库代码中,而是在您的代码中,因此请按照调用堆栈查找您的代码,并告诉我们问题所在(请编辑您的问题以执行此操作).cin>>大小;
你不觉得你来不及获得大小吗?你已经为你的race
数组分配了0个元素。谢谢你的快速回复,但是数组必须由用户控制,我被告知这是唯一的方法。还有其他方法吗?@John是的,使用std::vector
,然后你可以n根据需要添加条目。感谢您的快速回复,但数组必须由用户控制,我被告知这是唯一的方法。还有其他方法吗?@John Yes,使用std::vector
,然后您可以根据需要添加条目。