Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2013, 13:13   #1
Eugenelife
 
Регистрация: 23.02.2012
Сообщений: 4
По умолчанию Mutex нарушение прав доступа при чтении по адресу

Здравствуйте! При работе с мьютексом c++ возникло:
Необработанное исключение по адресу 0x582610D6 (msvcp110d.dll) в ConsoleSwap.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.

Код:
#include "stdafx.h"
#include <iostream>
#include <mutex>
#include <thread>
#include <chrono>
#include <fstream>

using namespace std;
using namespace std::chrono;
//mutex t;
recursive_mutex t;
fstream workFile, vectorFile;

ofstream swapFile, resultFile;

const int maxN = 20000;

int n, globalCounter;

int vector[maxN];
long resultVector[maxN];
void generateFile(int n)
{
    /* initialize random seed: */
    srand(time(NULL));

    workFile.open("D:\Универ\Системка 2 семестр\ConsoleSwap\ConsoleSwap\workFile.txt");
    vectorFile.open("D:\Универ\Системка 2 семестр\ConsoleSwap\ConsoleSwap\vectorFile.txt");

    if (workFile.is_open())
    {
        workFile << n << endl;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                int x = rand() % 89 + 10;
                workFile << x << " ";
            }
            workFile << endl;
            cout << i << endl;
        }
        workFile.close();
    }
    else cout << "Unable to open workFile";

    if (vectorFile.is_open())
    {
        for (int i = 0; i < n; i++)
        {
            int x = rand() % 89 + 10;
            vectorFile << x << " ";
            cout << i << endl;
        }
        vectorFile.close();
    }
    else cout << "Unable to open vectorFile";
}

void writeToSwapFile(int line[])
{
    swapFile.open("swapFile.txt");

    for (int i = 0; i < n; i++) swapFile << line[i] << " ";

    swapFile.close();
}

long calculateElement(int line[])
{
    long result = 0;

    for (int i = 0; i < n; i++) result += line[i] * vector[i];

    return result;
}

void performIteration()
{
    int currentLine[maxN];

    bool check= false;

    int tempCounter;
    while (!workFile.eof())
    {
        t.lock();

        if (!workFile.eof())
        {
            for (int j = 0; j < n; j++) workFile >> currentLine[j];

            check = true;

            tempCounter = globalCounter++;

            writeToSwapFile(currentLine);
        }

        t.unlock();

        if (check) resultVector[tempCounter] = calculateElement(currentLine);

        check = false;

        cout << tempCounter << endl;

    }
}
int _tmain(int argc, _TCHAR* argv[])
{
	    workFile.open("D:\Универ\Системка 2 семестр\ConsoleSwap\ConsoleSwap\workFile.txt");
    if (workFile.is_open())
    {
        workFile >> n;
        globalCounter = 0;
    }
    else cout << "Unable to open workFile";

    vectorFile.open("vectorFile.txt");
    if (vectorFile.is_open())
    {
        for (int i = 0; i < n; i++) vectorFile >> vector[i];
        vectorFile.close();
    }
    else cout << "Unable to open workFile";

    const int threadCount = 4;

    thread *threadArray[threadCount];

    for (int i = 0; i < threadCount; i++)
        threadArray[i] = new thread(performIteration);

    long time1 = clock();

    for (int i = 0; i < threadCount; i++)
        threadArray[i]->join();

    long time2 = clock();

    workFile.close();

    resultFile.open("D:\Универ\Системка 2 семестр\ConsoleSwap\ConsoleSwap\resultFile.txt");

    for (int i = 0; i < n; i++) resultFile << resultVector[i] << " ";

    resultFile.close();

    cout << "Multiplication done! It took me " << (double) (time2 - time1) / (1000 * 1000) << " seconds!";

//    generateFile(17000);

	system("pause");
	return 0;
}
Eugenelife вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ нарушение прав доступа при чтении по адресу 0x00000000 proef Помощь студентам 7 05.09.2013 23:49
Нарушение прав доступа при чтении Павел Гайдаржи Помощь студентам 0 11.11.2012 19:45
Нарушение прав доступа Hemul Qt и кроссплатформенное программирование С/С++ 1 08.04.2011 20:02
Нарушение прав доступа при чтении попытка вторая Farrel Общие вопросы C/C++ 5 24.02.2011 12:01
нарушение прав доступа при чтении Farrel Общие вопросы C/C++ 1 22.02.2011 00:32