Форум программистов, компьютерный форум CyberForum.ru

Ошибка: Нарушение прав доступа - C++

Восстановить пароль Регистрация
 
Страуструп
Сообщений: n/a
17.01.2011, 18:39     Ошибка: Нарушение прав доступа #1
Здравствуйте, пишу программу для минимизации канонических выражений (сумм минтермов).
Проблема такая - всё компилируется, а при запуске(после ввода символов с клавиатуры
VS2008 выдает следующее:

Первый этап обработки исключения в "0x0041181a" в "shablon.exe": 0xC0000005: Нарушение прав доступа при записи "0xccccccd0".
Необработанное исключение в "0x0041181a" в "shablon.exe": 0xC0000005: Нарушение прав доступа при записи "0xccccccd0".
Программа "[1280] shablon.exe: Машинный код" завершилась с кодом 0 (0x0).


ТЕКСТ ПРОГРАММЫ:


#include "stdafx.h"
#include<iostream>
#include <string>
#include <sstream>
#include <fstream>
#include<algorithm>
#include<stdexcept>
using namespace std;


#define TRUE 1
#define FALSE 1
#define MAX_CUBES 50
#define MAX_VARS 2

typedef unsigned short WORD;

struct cube{
WORD t; //собственно минтерм
WORD f; //его дополнение
};

typedef struct cube CUBE;


// ========== Функции ====================================
//========================================================
//======== переводит число из формата string в формат unsigned_short =======================
unsigned short string_to_unsigned_short( const string& s )
{
istringstream i(s);
unsigned short x;
if (!(i >> x))
return 0;
return x;
}
//== Считывает строки-минтермы с клавиатуры
void ReadMinterms(CUBE** tempCube)
{
string S;
CUBE D;
for (int e=0; e<MAX_VARS; e++){
cout<<"Enter minterm: "<<e<<endl;
getline(cin,S);
D.t= string_to_unsigned_short(S);
D.f=1^D.t;
tempCube[e][1]=D;
}
}


//проверяет содержит ли w точно одну 1
int Oneone(WORD w)
{
int ones,b;
ones=0;
for (b=0; b<MAX_VARS; b++){
if (w&1) ones++;
w=w>>1;
}
return((ones==1));
}

int Combinable(CUBE C1, CUBE C2)
{
WORD twordt, twordf;

twordt=C1.t^C2.t;
twordf=C1.f^C2.f;
return( (twordt==twordf)&&Oneone(twordt));
}


void Combine(CUBE C1, CUBE C2, CUBE *C3)
{
C3->t = C1.t&C2.t;
C3->f = C1.f&C2.f;
}


//проверка на равенство
int EqualCubes(CUBE C1, CUBE C2)
{
return ((C1.t==C2.t)&&(C1.f==C2.f));
}



void main()
{
CUBE cubes[MAX_VARS+1][MAX_CUBES];
int covered[MAX_VARS+1][MAX_CUBES];
int numCubes[MAX_VARS+1];
int m;
int j,k,p;
CUBE tempCube;
int found;
//инициализация числа m-кубов каждого уровня m
for (m=0; m<MAX_VARS+1; m++) numCubes[m]=0;
CUBE* pT=&tempCube;
ReadMinterms(&pT);

for (m=0; m<MAX_VARS; m++){
for (j=0; j<numCubes[m]; j++){
for (k=j+1; k<numCubes[m]; k++){
if (Combinable(cubes[m][j], cubes[m][k])){
//отмечаем покрытые кубы
covered[m][j]=TRUE; covered[m][k]=TRUE;
Combine(cubes[m][j],cubes[m][k], &tempCube);
found=FALSE;
for (p=0; p<numCubes[m+1];p++)
if (EqualCubes(cubes[m+1][p],tempCube)) found=TRUE;
if (!found) {
numCubes[m+1]=numCubes[m+1]+1;
cubes[m+1][numCubes[m+1]-1]=tempCube;
covered[m+1][numCubes[m+1]-1]=FALSE;
}
}
}
}
}
cube A;
for (m=0;m<MAX_VARS; m++){
for (j=0;j<numCubes[m];j++){
if (!covered[m][j]) {
A=cubes[m][j];
cout<<A.f<<endl;
cout<<A.t<<endl;
}
}
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2011, 18:39     Ошибка: Нарушение прав доступа
Посмотрите здесь:

C++ Ошибка: нарушение прав доступа при чтении
Ошибка: Нарушение прав доступа при чтении C++
Ошибка времени исполнения: нарушение прав доступа при чтении C++
Структуры, ошибка "нарушение прав доступа" C++
C++ Ошибка: нарушение прав доступа по адресу
C++ С++ ошибка 0xC0000005: Нарушение прав доступа при записи "0xcccccccc". Инициализация строк
C++ Ошибка при загрузке фото - нарушение прав доступа при чтении по адресу 0x00814000
C++ Ошибка: нарушение прав доступа при чтении по адресу

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
17.01.2011, 18:56
  #2

Не по теме:

Ник, конечно....

accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.01.2011, 05:24     Ошибка: Нарушение прав доступа #3
C++
1
2
3
4
5
6
    CUBE tempCube;
    int found;
    //инициализация числа m-кубов каждого уровня m
    for (m=0; m<MAX_VARS+1; m++) numCubes[m]=0;
    CUBE* pT=&tempCube;
    ReadMinterms(&pT);
тут видимо нужно создать указатель на массив указателей, а не одну структуру
в функции ReadMinterms() тоже неправильно tempCube[e][1]=D;, что за 1 ?
Yandex
Объявления
18.01.2011, 05:24     Ошибка: Нарушение прав доступа
Ответ Создать тему
Опции темы

Текущее время: 09:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru