我有这个问题,我运行我的程序,我得到一个弹出说调试断言失败

时间:2015-03-14 18:43:26

标签: c++ windows visual-studio-2013

我已经尝试了一个多星期但仍然卡住了。我甚至四处寻找解决方案,但仍然无处可去。谁能帮我?我也是Stack Overflow的新手。我发布了我认为合理的内容,而不是整个程序。

我的程序基本上是一个图书馆管理系统。我可以完美地编辑,添加和删除书籍,但在添加用户的客户时却不能。

我有一个结构Customer,我从一个文件读取并将数据传输到Customer个对象的数组。但在我的main中,当我调用方法addCustomer时,我看到Debug Assertion失败了!

它说:

Debug Assertion Failed!
Program: C:\Windows\system 32\MSVCP120D.dll

File: c\program files (x86)\microsoft visual studio 12.0\vc\xstring

Line: 1168
Expression: invalid null pointer.

我的代码:

struct Customer{

string first = "",
    last = "",
    id = "",
    phonenumber = "",
    email = "",
    BookID = "",
    return_date = "";
};

将信息添加到数组

void FileToArray(int& index, Customer library[]){
ifstream readCustomers;
readCustomers.open("CustomerDatabase.txt");

int i = 0;


// transfer file to array for customers

while (readCustomers >> library[i].id >> library[i].first >> library[i].last >> library[i].email
    >> library[i].phonenumber >> library[i].BookID >> library[i].return_date)

{
    i++;
}

index = i;

readCustomers.close();
}

添加客户

void addCustomer(int& index, Customer library[]){
/*
Adds customer to the database
*/

//Declarations
string firstName, lastName, email;

string phonenumber, NumBorrowed = 0;

// Get required input
cout << "First Name:" << endl;
cin.ignore(100, '\n');
getline(cin, firstName);

cout << "Last Name:" << endl;
getline(cin, lastName);

cout << "Email:" << endl;
getline(cin, email);

cout << "Phone Number:" << endl;
getline(cin, phonenumber);


// add to array for books
//LibraryCustomers[index].id = id;
library[index].first = firstName;
library[index].last = lastName;
library[index].email = email;
library[index].phonenumber = phonenumber;
library[index].BookID = "0";
library[index].return_date = "0";

index++;
}

主要

int main(){

int CustomerAddCount = 0;   // Will keep track of the last index that has been added.
Customer LibraryCustomers[1024]; // Transfering the data from file to array 

FileToArray(CustomerAddCount,LibraryCustomers);
addCustomer(CustomerAddCount,LibraryCustomers);

return 0;
}

由于

1 个答案:

答案 0 :(得分:0)

这是有问题的一行:

string phonenumber, NumBorrowed = 0;

查看变量的类型:它们都是std::string个对象。

std::string没有构造函数可以使用int。但它确实有一个const char*。这意味着0被解释为空指针常量,用于创建空const char*,并传递给std::string的构造函数。 constructor有一个前提条件,即它的参数指向一个有效的,以空字符结尾的字符串。情况并非如此,因此程序崩溃(实际上是断言)。

当然,在调试器中单步执行程序会告诉你。