PE14-1编程练习.exe 中的 0x58742258 (msvcp100d.dll) 处有未经处理的错误: 0xC0000005: 写入位置 0x00000
PE14-1编程练习.exe 中的 0x58742258 (msvcp100d.dll) 处有未经处理的异常: 0xC0000005: 写入位置 0x00000
程序能编译,但是运行的时候写入数据提示
PE14-1编程练习.exe 中的 0x58742258 (msvcp100d.dll) 处有未经处理的异常: 0xC0000005: 写入位置 0x00000
------解决方案--------------------
0xC0000005是内存访问违规
单步调试下吧。注意指针,越界等问题
------解决方案--------------------
程序能编译,但是运行的时候写入数据提示
PE14-1编程练习.exe 中的 0x58742258 (msvcp100d.dll) 处有未经处理的异常: 0xC0000005: 写入位置 0x00000
- C/C++ code
#include "stdafx.h" #include <iostream> #include <valarray> #include <string> #include <cstring> using namespace std; template <typename T1, typename T2> class Pair { private: T1 a; T2 b; public: T1 first() { return a; } T2 second() { return b; } Pair (const T1 & t1, const T2 & t2) : a (t1), b (t2) { } Pair () { } }; class Wine { private: typedef valarray<int> ArrayInt; typedef Pair<ArrayInt, ArrayInt> PairArray; string label; int year; PairArray pa; public: Wine (const char * l, int y, const int yr[], const int bot[]) : label (l), year (y), pa(ArrayInt(yr, year), ArrayInt(bot, year)) { } Wine (const char * l, int y) : label (l), year (y) { } void GetBottles(); string & Label() { return label; } int Sum(); void Show(); }; void Wine::GetBottles() { cout << "Enter " << label << " data for " << year << " year(s):\n"; for (int i = 0; i < year; i++) { cout << "Enter year: "; cin >> pa.first()[i]; cout << "Enter bottles for that year: "; cin >> pa.first()[i]; } } void Wine::Show() { cout << "Wine: " << label << endl; cout.width(4); cout << "Year"; cout << " "; cout.width(7); cout << "Bottles" << endl; for (int i = 0; i < year; i++) { cout.width(4); cout << pa.first()[i]; cout << " "; cout.width(7); cout << pa.second()[i]; } } int Wine::Sum() { int sum = 0; for (int i = 0; i < year; i++) { sum += pa.first()[i]; } return sum; } int main() { cout << "Enter name of wine: "; char lab[50]; cin.getline(lab, 50); cout << "Enter number of years: "; int yrs; cin >> yrs; Wine holding(lab, yrs); //stors label, years, give arrays yrs elements holding.GetBottles(); holding.Show(); const int YRS = 3; int y[YRS] = {1993, 1995, 1998}; int b[YRS] = {48, 60, 72}; //create new object, initialize using data in array;s ;y and b Wine more("Gushing Grzpe Red", YRS, y, b); more.Show(); cout << "Total bottles for " << more.Label() //use Label() method << ": " << more.Sum() << endl; //use sum() method cout << "Bye\n"; return 0; }
------解决方案--------------------
0xC0000005是内存访问违规
单步调试下吧。注意指针,越界等问题
------解决方案--------------------
- C/C++ code
char lab[50] = {0}; // 初始化下 cin.getline(lab, 50-1); // 至少留一个要给字符串结束符 \0
------解决方案--------------------