cout导致VC++10中的访问冲突
cout causing access violation in VC++ 10
很抱歉,我对C++还比较陌生,所以我正在调试这段代码,这使我第三次出现访问冲突cout<lt;调用(在load_array返回之后):
#include <cstdlib>
#include <iostream>
#include <fstream>
#define FILENAME "H:\test.preisach"
#define ROWS 32760
#define COLUMNS 4
using namespace std;
class cPreisach {
public:
float input;
float pdf[ROWS][COLUMNS];
void load_array (){
char c;
float value=0;
int getnum=0, rowno=0, columnno=0, power=0;
bool decimalpoint=false, exponential=false;
ifstream pdf_file (FILENAME);
if (pdf_file.is_open()) {
while (pdf_file.good()) {
c=pdf_file.get();
switch (c) {
case '0': if (exponential == false) {value = (value*10); if (decimalpoint=true) getnum++;} else power=power*10; break;
case '1': if (exponential == false) {value = (value*10)+1; if (decimalpoint=true) getnum++;} else power=(power*10)+1; break;
case '2': if (exponential == false) {value = (value*10)+2; if (decimalpoint=true) getnum++;} else power=(power*10)+2; break;
case '3': if (exponential == false) {value = (value*10)+3; if (decimalpoint=true) getnum++;} else power=(power*10)+3; break;
case '4': if (exponential == false) {value = (value*10)+4; if (decimalpoint=true) getnum++;} else power=(power*10)+4; break;
case '5': if (exponential == false) {value = (value*10)+5; if (decimalpoint=true) getnum++;} else power=(power*10)+5; break;
case '6': if (exponential == false) {value = (value*10)+6; if (decimalpoint=true) getnum++;} else power=(power*10)+6; break;
case '7': if (exponential == false) {value = (value*10)+7; if (decimalpoint=true) getnum++;} else power=(power*10)+7; break;
case '8': if (exponential == false) {value = (value*10)+8; if (decimalpoint=true) getnum++;} else power=(power*10)+8; break;
case '9': if (exponential == false) {value = (value*10)+9; if (decimalpoint=true) getnum++;} else power=(power*10)+9; break;
case '.': decimalpoint=true; break;
case 'E': exponential = true; break;
case ' ': if (value != 0){
value = value/(10^(getnum-power)); /*cout << rowno << columnno << "n";*/ pdf[rowno][columnno] = value; value=0; power=0; getnum=0; decimalpoint=false;
exponential=false; columnno++;
} break;
case 'n': value = value/(10^(getnum-power)); /*cout << "newline" << rowno << columnno << "n";*/ pdf[rowno][columnno] = value; value=0; power=0; getnum=0; decimalpoint=false;
exponential=false; rowno++; columnno=0; break;
}
}
pdf_file.close();
}
}
void do_calculation (float input) {}
};
int main () {
float input;
cout << "welcome to the preisach function n";
cPreisach Preisach;
cout << "created object, loading array n";
Preisach.load_array();
cout << "please input magnetic field strength n";
cin >> input;
Preisach.do_calculation (input);
return 0;
}
我不知道为什么cout会导致访问冲突,但这一定与数组有关,因为如果该函数被注释掉,cout就可以了。
感谢
编辑,因为我还没有被允许回答我自己的问题:这确实是一个缓冲区溢出,部分原因是我忘记了从[0]而不是[1][1]递增。不知道为什么我没有想到;相当愚蠢。谢谢大家:)
我想错误是在访问文件时引起的。您应该检查程序是否可以访问该文件,并且它没有中断。
我看到的另一件事是,你从不打开文件,而是检查它是否打开。
ifstream pdf_file (FILENAME);
if (pdf_file.is_open()) {
看起来应该更像
ifstream pdf_file;
pdf_file.open(FILENAME);
if (pdf_file.is_open()) {
当然,如果程序还没有打开,就不能从文件中读取,你的if必须失败。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 读取访问冲突.这0xCDCDCDCD
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 插入数组时违反写访问冲突
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 如果使用低于 VS2015 的 vc++ 编译器版本编译,则 DLL 中的访问冲突
- vc++ 访问冲突读取位置
- cout导致VC++10中的访问冲突
- 使用 VC++ 中的 Try 和 catch 块捕获内存访问冲突
- VC++ 上的访问冲突错误
- 从私有成员值类型 (bool) 读取的 VC++ 访问冲突