R6010 abort has been called ошибка

434 / 299 / 82

Регистрация: 11.12.2010

Сообщений: 1,209

1

01.04.2013, 14:27. Показов 24275. Ответов 10


Студворк — интернет-сервис помощи студентам

Написал программу которая перемножает 2 очень больших матрицы.
На мелких она работает. То есть 10000 на 10000 умножает без проблем.
Однако 15000×15000 и выше уже выбивают

: R6010 — abort() has been called

Грешил на тип. Так как матрицы типа int сменил на long ошибка осталась.



0



:)

Эксперт С++

4773 / 3267 / 497

Регистрация: 19.02.2013

Сообщений: 9,046

01.04.2013, 14:31

2

Kill100, код в студию. А вообще подобная ошибка встречалась при отсутствии конфига в нужном каталоге.



1



5230 / 3202 / 362

Регистрация: 12.12.2009

Сообщений: 8,112

Записей в блоге: 2

01.04.2013, 14:35

3

15000 * 15000 = 225 000 000
225 000 000 * 4(sizeof(int)) = 900 000 000 = ~900 MB
900 * 2 (матрицы) = ~1.8 GB

сколько RAM на машине?



1



434 / 299 / 82

Регистрация: 11.12.2010

Сообщений: 1,209

01.04.2013, 14:43

 [ТС]

4

Цитата
Сообщение от Kastaneda
Посмотреть сообщение

900 * 2 (матрицы) = ~1.8 GB
сколько RAM на машине?

16gb. Так что в этом проблемы быть не может



0



5230 / 3202 / 362

Регистрация: 12.12.2009

Сообщений: 8,112

Записей в блоге: 2

01.04.2013, 14:45

5

причин для abort() много, а дебажить пробовал?



0



434 / 299 / 82

Регистрация: 11.12.2010

Сообщений: 1,209

01.04.2013, 14:47

 [ТС]

6

Цитата
Сообщение от Tulosba
Посмотреть сообщение

Kill100, код в студию. А вообще подобная ошибка встречалась при отсутствии конфига в нужном каталоге.

Чел спс! Ты натолкнул меня 1 очень интересную мысль, проверил прога заработала.
В настройках проекта поставил платформу 64x. И всё пучком.



0



:)

Эксперт С++

4773 / 3267 / 497

Регистрация: 19.02.2013

Сообщений: 9,046

01.04.2013, 14:48

7

Не по теме:

Цитата
Сообщение от Kastaneda
Посмотреть сообщение

сколько RAM на машине?

главное чтоб на 16Гб RAM не было 32bit винды :D

Добавлено через 26 секунд

Цитата
Сообщение от Kill100
Посмотреть сообщение

В настройках проекта поставил платформу 64x.

Ч.Т.Д



1



434 / 299 / 82

Регистрация: 11.12.2010

Сообщений: 1,209

01.04.2013, 16:54

 [ТС]

8

Рано радовался.
Теперь при построении стало писать

array_on_vector.cpp(129): warning : C6386: Переполнение буфера при записи в «Return_Vektor»: доступный для записи объем равен «len_vector_m*4» байт, однако записать можно только «8» байт.
array_on_vector.cpp(132): warning : C6385: Чтение недопустимых данных из «Return_Vektor»: доступный для чтения объем равен «len_vector_m*4» байт, однако считать можно только «8» байт.



0



:)

Эксперт С++

4773 / 3267 / 497

Регистрация: 19.02.2013

Сообщений: 9,046

01.04.2013, 16:57

9

Kill100, код-то покажешь или нет?



0



Kill100

434 / 299 / 82

Регистрация: 11.12.2010

Сообщений: 1,209

01.04.2013, 16:58

 [ТС]

10

А всё отбой нашел описание
http://msdn.microsoft.com/en-u… s.80).aspx

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
long* Multiply(long* vectors, long len_vector_m, long** mass, long mass_n)
{
    long* Return_Vektor = new long[len_vector_m];//а надо было mass_n
    for(long i=0; i<mass_n; i++)
    {
        Return_Vektor[i]=0;//обнуляем значение
        for (long j=0; j<len_vector_m; j++)
        {
            Return_Vektor[i]+=mass[i][j]*vectors[j];//умножение вектора на столбцы
        }
    }
    return Return_Vektor;//возвращая результат
}



0



Friday

ну и долго меня небыло…

61 / 57 / 8

Регистрация: 24.03.2013

Сообщений: 173

01.04.2013, 17:03

11

Цитата
Сообщение от Kill100
Посмотреть сообщение

А всё отбой нашел описание
http://msdn.microsoft.com/en-u… s.80).aspx

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
long* Multiply(long* vectors, long len_vector_m, long** mass, long mass_n)
{
    long* Return_Vektor = new long[len_vector_m];//а надо было mass_n
    for(long i=0; i<mass_n; i++)
    {
        Return_Vektor[i]=0;//обнуляем значение
        for (long j=0; j<len_vector_m; j++)
        {
            Return_Vektor[i]+=mass[i][j]*vectors[j];//умножение вектора на столбцы
        }
    }
    return Return_Vektor;//возвращая результат
}

попробуй long long вместо long



0



Всем доброго дня!

Использую поток от STL (std::thread) из нового стандарта (работаю с Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov2012)). Есть класс TCPServer, содержащий в себе этот поток:

class TCPServer final : public WaitingPoint
{
  public:
    boost::asio::io_service* ioService;

  private:
    std::atomic_bool isExit;
    std::thread thread;
    boost::asio::ip::tcp::acceptor* ioAcceptor;
    std::atomic_bool isWaitingAccept;
    std::shared_ptr<ConnectionPoint> connectionAccept;

    ...
};

Затем в один из моментов я запускаю поток (то есть до этого функцию обработки я ему не указывал):

Result TCPServer::init(void)
{
  isExit=false;
  ioService=new (std::nothrow) boost::asio::io_service();
  if(!ioService) return Result::errorMemory;
  ioAcceptor=new (std::nothrow) boost::asio::ip::tcp::acceptor(*ioService);
  if(!ioAcceptor) return Result::errorMemory;
  tcp.set(ioAcceptor,nullptr);
  thread=std::thread(std::bind(&TCPServer::loop,std::static_pointer_cast<TCPServer>(shared_from_this())));
  return Result::ok;
}

Он крутит цикл:

Result TCPServer::loop(void)
{
  boost::system::error_code ec;
  while(!isExit)
  {
    ioService->run_one(ec);
    ioService->reset();
  }
  return Result::ok;
}

И когда мне уже он не нужен, я вызываю это:

void TCPServer::free(void)
{
  ioAcceptor->close();
  connectionAccept.reset();
  if(!isExit)
  {
    isExit=true;
    ioService->reset();
    ioService->stop();
    if(thread.joinable()) thread.join();
  }
}

Грубо говоря у меня есть функция release():

void WaitingPoint::release(void)
{
  if(isRemoved) return;
  isRemoved=true;
  mConnectionPoints.lock();
  size_t len=vConnectionPoints.size();
  for(size_t i=0;i<len;i++)
  {
    auto& item=vConnectionPoints[i];
    item->isRemoved=true;
    item->free();
  }
  vConnectionPoints.clear();
  mConnectionPoints.unlock();
  std::shared_ptr<WaitingPoint> p(shared_from_this());
  Core::instance->freeWaitingPoint(this);
  free();
}

Вызовом которой я удаляю сервер. Делаю я это вот так:

void release(void)
{
  if(waitingPoint) waitingPoint->release();
  while(true);
  if(connectionPoint) connectionPoint->release();
  if(core) core->release();
  std::cout<<std::endl<<"Press Enter for exit...";
  std::cin.get();
}

Тут я намеренно зациклил программу. В общем после выполнения задуманного мной сценария
и дохода до бесконечного цикла, программа в какой-то момент (уже вися основным потоком в бесконечном цикле) рушится с сообщением:

И останавливается вот тут:

То есть проблема с потоком. В чём может быть ошибка и как её исправить?

  • Изменено

    26 января 2013 г. 11:10

I’m trying to enter a number,n and get the least super lucky number that is more than or equal to n.
Super lucky: it’s decimal representation contains equal amount of digits 4 and 7. For example, numbers 47, 7744, 474477 are super lucky and 4, 744, 467 are not.

Here’s my code

     #include<iostream>
     #include<string>
     using namespace std;

     void superLucky(int n,string s, int count4, int count7)
     {
        if (s.size() > 10)
          return;
        if (( stoi(s) >= n ) && (count4 == count7) && (count4+count7)!=0)
        {
             cout << s << endl;
             return;
        }

        superLucky(n, s + '4', count4+1, count7);
        superLucky(n, s + '7',count4,count7+1);
     }

     int main()
     {
        int n;
        cin >> n;
        superLucky(n, "", 0, 0);
        return 0;
     } 

Once I input some integer I get debug error R6010 — abort() has been called. What this means ? and how can I fix this ?

At completely random times during runtime, my program crashes with the error in the title. The error occurs without any user inputs or indication as to why, which makes it difficult to debug. The Call Stack doesn’t help either:

msvcr120d.dll!00007ffa9f8b7642()    Unknown
msvcr120d.dll!00007ffa9f9e2044()    Unknown
msvcr120d.dll!00007ffa9f9a8c98()    Unknown
msvcp120d.dll!00007ffaa7273340()    Unknown
msvcr120d.dll!00007ffa9f9baf90()    Unknown
msvcr120d.dll!00007ffa9f9aafe2()    Unknown
ntdll.dll!00007ffad1633573()    Unknown
msvcp120d.dll!00007ffaa722df29()    Unknown
msvcr120d.dll!00007ffa9f8ba105()    Unknown
msvcr120d.dll!00007ffa9f8ba357()    Unknown
vfbasics.dll!00007ffab17dc729() Unknown
kernel32.dll!00007ffacede13d2() Unknown
ntdll.dll!00007ffad15b5444()    Unknown

According to the thread list, the error doesn’t occur in the main thread, so it might be a multi-threading conflict, but I don’t know for sure.

I can’t post any code because the program is too big and I don’t know which piece of the code is causing the issue.

How can I narrow the problem down?

  • Forum
  • Beginners
  • R6010 — Abort()

R6010 — Abort()

I am getting a debug error when my program reaches: throw invalid_argument( "Month must be between 1-12" );

The error is: R6010 — abort() has been called.

1
2
3
4
5
6
7
8
void Date::setMonth( int m )
{
	if ( m > 0 && m <= 12 )
		month = m;
	else 
		throw invalid_argument( "Month must be between 1-12" );
		//cout << "Invalid month";
}

In main:

1
2
3
4
5
	Date date3( 1, 28, 2011 );
	date3.print();
	cout << endl << endl;
	date3.setMonth( 13 );
	date3.print();

Setting the date out of bounds causes this when it should just throw the error message. When I do a try/catch it works properly though.

That’s normal. Uncaught exceptions terminate the program, as they should.

Topic archived. No new replies allowed.

  • Radmin vpn скачать ошибка 1603
  • R5apex exe ошибка приложения 0xc0000005
  • Radmin vpn ошибка служба не запущена
  • R3137 ошибка компрессор чкз
  • Radmin vpn ошибка при подключении к сетевой игре майнкрафт