【发布时间】:2014-05-09 07:20:37
【问题描述】:
由于某种原因,代码会崩溃并给我一个访问冲突错误。它一直说对象用户未初始化。
随机编码中 0x0F45E89A (msvcr110d.dll) 处的第一次机会异常 在 C++.exe 中:0xC0000005:访问冲突写入位置 0xABABABAB.Unhandled 异常在 0x0F45E89A (msvcr110d.dll) 在随机 C++.exe 中的编码:0xC0000005:访问冲突写入位置 0xABABABAB.
谢谢。有什么想法吗?
#include <iostream>
#include <fstream>
#include <cstring>
#include <sstream>
#include <vector>
#include <string>
using namespace std;
struct User {
string name; //Both first and last name go here
int birthYear;
string major;
};
int main()
{
ifstream input("input.txt");
if(!input || !input.is_open())
return -1;
string buffer;
int count = -1;
int index = 0;
int size;
User* users;
while(getline(input, buffer, '\n'))
{
stringstream ss(buffer);
if(count == -1)
{
ss >> size;
users = new User[size];
count = 0;
}
else
{
if(count == 0)
{
users[index].name = buffer;
count++;
}
if(count == 1)
{
ss >> users[index].birthYear;
count++;
}
if(count == 2)
{
users[index].major = buffer;
count = 0;
index++;
}
}
}
for(int i = 0; i < 2; i++)
{
cout<<users[i].name << " " << users[i].birthYear << " " << users[i].major <<endl;
}
system ("PAUSE");
return 0;
}
【问题讨论】:
-
我认为这是因为您没有创建用户来填充您的数组。每当您尝试访问 users[index] 时,什么都没有。
-
什么时候崩溃?您是否使用简单的
cout跟踪对其进行了调试或跟踪?您是否考虑过使用矢量来代替?您的包含路径表明您拥有。 -
在
ss>>size;之后填写std::cout<<size<<std::endl;。可能是负面的等等。 -
@user 要求调试代码转储的问题通常应该被关闭。相反,请参阅ericlippert.com/2014/03/05/how-to-debug-small-programs
标签: c++ object initialization