C++ 分段故障(堆芯转储)C++;面向对象编程
我是一名系统工程专业的学生,就读于ULA(洛斯安第斯大学)第二学期 <> P>我正在为大学编程一个C++迷你项目。该项目包括制作一个面向买卖加密货币的软件草案,然而,从昨天开始,我就遇到了一个问题(一个细分错误)。。。因此,由于这一页对我以前的课程很有帮助,而这次我没有找到任何可以帮助我的东西,所以我决定注册并询问是否有人愿意帮助我C++ 分段故障(堆芯转储)C++;面向对象编程,c++,c++11,C++,C++11,我是一名系统工程专业的学生,就读于ULA(洛斯安第斯大学)第二学期 P>我正在为大学编程一个C++迷你项目。该项目包括制作一个面向买卖加密货币的软件草案,然而,从昨天开始,我就遇到了一个问题(一个细分错误)。。。因此,由于这一页对我以前的课程很有帮助,而这次我没有找到任何可以帮助我的东西,所以我决定注册并询问是否有人愿意帮助我 #include <iostream> #include <string.h> #include <stdlib.h> using
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
class usuario {
private :
string username[10], password[10];
int aux;
public :
usuario();
void setUnamep(string, string, int);
string getUnamep();
void setPass(string);
string getPass();
int DataAcc(string, string);
~usuario();
};
class moneda {
protected :
float cantidad;
public :
moneda(float);
void setCant(float);
void getCant();
~moneda();
};
class bitcoin : public moneda {
private :
float btc[20];
public :
bitcoin (float);
void setBuy(float, float[]);
void getBuy();
void mostrarc(float);
~bitcoin();
};
usuario::usuario () {
}
void usuario::setUnamep(string username_, string password_, int aux_) {
string PreUser[20], aux_2;
aux = aux_;
for (int i= 1; i <= aux; i++) {
username[i] = username_[i];
password[i] = password_[i];
cout<<"\nEnter an username: ";
cin>>username[i];
cout<<"Enter a password: ";
cin>>password[i];
username[0] = "."; //pass 1 leer
for (int v = 0 ; v < i; v++) {
if (username[v] == username[i]) {
cout<<"\nUsername already in use. Choose another"<<endl;
username[i] = "null";
password[i] = "null";
i--;
v = 20000;
}
}
}
}
int usuario::DataAcc(string InUs, string InPass) {
bool ing = false, ret = false;
int u = 0;
do {
if (InUs==username[u] and InPass==password[u]) {
ing = true;
u = 10;
ret = true;
}
else //////
u++;
}
while (ing == false and u<5);
if (u == 5)
cout<<"\nIncorrect user or password. Try again."<<endl;
if (ing == true) {
cout<<"\nAccount data..."<<endl;
}
return ret;
}
usuario::~usuario() {
}
moneda::moneda(float cantidad_) {
cantidad = cantidad_;
}
moneda::~moneda() {
}
bitcoin::bitcoin(float cantidad_) : moneda(cantidad_) {
}
void bitcoin::setBuy(float cantidad_, float btc_[]) {
int aux;
for (int i = 0; i < 20 ; i++) {
btc[i] = btc_[i];
}
cout<<"How many BTC do you wish to buy?: ";
cin>>cantidad;
btc[aux] = btc[aux] + cantidad;
}
bitcoin::~bitcoin() {
}
int main() {
int opc = 0, aux1;
string InUs, InPass;
int aux2 = 0;
bitcoin b1(0);
cout<<"Welcome to BitZuela 2018, down there you have several options for you to choice which one do you want to run. ";
cout<<"\n\n1. Sign Up."<<endl;
cout<<"2. Log in."<<endl;
cout<<"3. Finish program."<<endl;
usuario u1;
while (opc >=0 and opc <=2) {
cout<<"\nPress the button of the option you want to run: ";
cin>>opc;
if (opc==1) {
cout<<"\nHow many accounts do you want to register?: ";
cin>>aux1;
u1.setUnamep("null", "null", aux1);
}
if (opc==2) {
cout<<"\nUsername: ";
cin>>InUs;
cout<<"Password: ";
cin>>InPass;
aux2 = u1.DataAcc(InUs, InPass);
if (aux2 == 1) {
b1.setBuy(0,0); //The problem is when this object is created
}
}
if (opc == 3)
cout<<"\nProgram finished."<<endl;
}
return 0;
}
#包括
#包括
#包括
使用名称空间std;
usuario类{
私人:
字符串用户名[10],密码[10];
int aux;
公众:
usuario();
void setUnamep(string,string,int);
字符串getUnamep();
无效setPass(字符串);
字符串getPass();
int DataAcc(字符串,字符串);
~usuario();
};
moneda类{
受保护的:
浮雕;
公众:
莫奈达(浮动);
无效设置(浮动);
void getCant();
~moneda();
};
比特币类别:公共货币{
私人:
浮动btc[20];
公众:
比特币(浮动);
void setBuy(浮动,浮动[]);
void getBuy();
void mostrarc(浮动);
~bitcoin();
};
乌萨里奥::乌萨里奥(){
}
void usuario::setUnamep(字符串用户名、字符串密码、int aux){
字符串预用户[20],辅助用户2;
aux=aux_u2;;
对于(inti=1;i而言,这种方法似乎存在一些问题
void bitcoin::setBuy(float cantidad_, float btc_[]) {
int aux;
for (int i = 0; i < 20 ; i++) {
btc[i] = btc_[i];
}
cout<<"How many BTC do you wish to buy?: ";
cin>>cantidad;
btc[aux] = btc[aux] + cantidad;
}
可能还有其他一些问题,但解决这些问题将是朝着正确方向迈出的一步。您的核心转储在setBuy函数中。您要求一个浮点数组,但在代码中调用它时,会传递一个“0”,但应该传递一个20个元素的数组
aux变量设置在函数内部,但我认为应该从函数的签名传递它
此外,您在该函数中使用的cantidad变量不是签名中的变量(您应该将其从签名中删除,或者在cantidad中添加一个uu)
我还研究了setUnamep函数,您应该使用std::map来管理用户名和密码(您可以在日志(n)中搜索已经存在的密钥)。我建议您学习如何在核心文件中使用调试器来查找错误。如果您有gdb,您可以按如下方式执行:“gdb MyProg core。”。这将准确地告诉您程序的行号。是的,aux未初始化变量是一个问题。另一个问题是您正在访问超出setUnamep中字符串长度的用户名和密码字符串。
if (aux2 == 1) {
b1.setBuy(0,0);