Консультация № 193274
17.05.2018, 18:48
0.00 руб.
0 18 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
вот такая вот ошибка на выходе из функции
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
const void * pUserData
)
{
if (!pUserData)
return FALSE;

if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE))
return FALSE;

return HeapValidate( _crtheap, 0, pHdr(pUserData) );
}

Обсуждение

давно
Академик
20764
1861
17.05.2018, 19:04
общий
А сообщение об ошибке? Там из стандартных атрибутов только "C"
Остальное должно быть определено через #define То ли забыли что-то включить, то ли версия компилятора не совпадает.
Хотя -- extern и inline одновременно -- рискованно это. можно описать и определить порознь, даже и рядом.
давно
Посетитель
402071
12
17.05.2018, 19:30
общий
Адресаты:
в сообщение об ошибке пишит что произошло срабатывани точки остоновки и выкидавает сюда
давно
Посетитель
402071
12
17.05.2018, 19:37
общий
27.05.2018, 14:33
[code h=250]// ConsoleApplication83.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <cstdlib>
#include <ctime>
#include <stdlib.h>

using namespace std;

class tvector {
public:
int n_vec;
int *d_v;
tvector add_v(int);//сложение
void constrctor_v(int);//создание
//tvector crossproduct();//длина
void getelement_v();//вывод элемента
//int getleng(int);//вывод длины
double getmagnitude();//модуль
tvector mult_ch(int);//умножние на число
int mult_sk(int);//скалярное умножение
tvector mult_vek(int);//векторное умножение
//void exit_v();//умножение на матрицу
void setelement(int);//ввод злемента
void setelement_s(int); //ввод злемента рандом
int setlengh();//ввод длины
~tvector();//диструктор
tvector(const tvector &tvector);//конструктор копирования
tvector();//неявный конструктор
tvector & operator = (const tvector & tvector);//оператор присваивания

};
void tvector::getelement_v()
{
for(int i=0;i<n_vec;i++)
cout <<" d_i=" <<d_v[i]<<"\t";
}
void tvector :: setelement(int n)
{ for (int i=0;i<n;i++){
std::cout<<"vvedite element ";
std::cin>>d_v[i];
}
}
tvector:: tvector(const tvector & tvector)
{
n_vec=tvector.n_vec;
d_v=new int [n_vec];
for(int i=0;i<n_vec;i++)
d_v[i]=tvector.d_v[i];



}
tvector::~tvector()
{
//cout<<"y delete1\t";
/// if (d_v!=NULL){
//cout<<"y delete3\t";
delete d_v;
// cout<<"y delete2\t";
//ii=ii+1;
//cout<<"ii="<<ii;
}
//
tvector& tvector:: operator=(const tvector & tvector)
{
if(this !=&tvector){
delete[]d_v;
n_vec=tvector.n_vec;
d_v=new int[n_vec];
for(int i=0;i<n_vec;i++)
d_v[i]=tvector.d_v[i];
}
else {
}
return *this;

}


tvector:: tvector()
{
int n=1;
n_vec=1;
d_v=new int [n];
}




void tvector :: constrctor_v(int n)
{
delete d_v;
d_v=new int [n];
for (int i=0 ;i<n_vec; i++)
d_v[i]=0;
//setelement (i);
}
void tvector::setelement_s(int n)
{ int x,y;
srand (time(NULL));
for(int i=0;i<n;i++){
x =rand()%10;
y=rand()%100;
if (x>5) y=-y;
// cout<<"y="<<y;
d_v[i]=y;
cout<<"matmodel.d_v[i]="<<d_v[i];
}
}

int tvector::setlengh()
{
cout<<"vvedite razmernost vectora ";
cin>>n_vec;
return n_vec;
}


class TScena

{
public:
TScena
();
~TScena
();

//double gravitaciy();
double atmospere();


};

TScena
::TScena
()
{
}

TScena
::~TScena
()
{
};
class integrator
{
public:
void getmatmodel(tvector);
tvector matmodel;
void dorman_princ();
double hag(double,double,tvector);

};
class TFly
{
public:
tvector x;
TFly();
~TFly();
tvector move();


private:

};

TFly::TFly()
{

}

TFly::~TFly()
{
}

class TAircraft:TFly

{
public:
tvector x;
TAircraft();

~TAircraft();
void move();

private:

};

TAircraft::TAircraft()
{

};

TAircraft::~TAircraft()
{
delete x.d_v;
}

class TForward:TAircraft

{
public:
TForward();
~TForward();

private:

};
void TAircraft::move()
{ integrator A;
A.dorman_princ();

cout<<"y tyt move";
}

TForward::TForward()
{
}

TForward::~TForward()
{
};

class TMissail:TFly
{
tvector x;
//TBins y;
tvector move(tvector);

};


class TBins

{
public:
TBins
();
~TBins
();
double navigaton();
private:

};

TBins
::TBins
()
{
}

TBins
::~TBins
()
{
}
class TGNSS
{

};
double integrator::hag(double h0,double emax,tvector x)
{
double h,a,e,a1,a2;
cout<<"vvedte ohibqu\n";
e=0.1;
//cin>>e;
a=pow((e/emax),(1/5));
a1=a/0.9;

if (5<a1)
{
a1=5;
}
if ( 0.1>a1)
{
a1=0.1;
}

h=(h0/a1);
cout<<"y tyt hag\n";
cout<<h<<"\n";
return h;
}

void integrator::getmatmodel(tvector x)
{
x.setelement_s(6);
matmodel.d_v[0]=x.d_v[3];
matmodel.d_v[1]=x.d_v[4];
matmodel.d_v[2]=x.d_v[5];
matmodel.d_v[6]=x.d_v[6];


cout<<"y tyt matmodel\n";
//return matmodel;
}
void integrator::dorman_princ()
{
double k1,k2,k3,k4,h,h0,emax;int t;
tvector x;
//cout<<"vvedite nachlnay shag\n";
//cin>>h0;
h0=1;
//cout<<"vvadite max ohibqu\n";
//cin>>emax;
emax=0.5;
h=hag(h0,emax,x);
cout<<h;
matmodel.setelement_s(6);
cout<<"y tyt doman princ";
for(int i=0;i<=5;i++)
{
//out<<i;
cout<<"y tyt k";
k1=matmodel.d_v[i];
cout<<"k1=";cout<<k1<<"\n";
k2=matmodel.d_v[i]+(1/5)*h*k1;
cout<<"k2=";cout<<k2<<"\n";
k3=matmodel.d_v[i]+((3/40)*h*k1+(9/40)*h*k2);
cout<<"k3=";cout<<k3<< "\n";
k4=matmodel.d_v[i]+(44/45)*h*k1-(56/12)*h*k2+(32/9)*h*k3;
cout<<"k4=";cout<<k4<<"\n";
x.d_v[i]=matmodel.d_v[i]+h/6*(k1+2*k2+2*k3+k4);
cout<<"x.d_v["<< i <<"]"<<x.d_v[i]<<"\n";
}

}

int _tmain(int argc, _TCHAR* argv[])
{
tvector x0,x;double e,emax;int t,t0,ht;
TAircraft A;
cout<<"vvedite nachalnoe vreme";
cin>>t;
cout<<"vvedete konehnoe vreme";
cin>>t0;
cout<<"vvedete hag";
cin>>ht;
while (t<t0)
{
A.move();
cout<<"y tyt glav";
x.getelement_v();
t=t0+ht;
}

system ("pause");
return 0;
}[/code]
давно
Академик
20764
1861
17.05.2018, 19:43
общий
Адресаты:
Просто ПРОЦИТИРУЙТЕ это сообщение. А код пока не нужен. Тем более без пользы пересказывать сообщение своими словами
давно
Посетитель
402071
12
17.05.2018, 20:23
общий
Адресаты:
ConsoleApplication83.exe вызвал срабатывание точки останова. скопровал
давно
Посетитель
402071
12
17.05.2018, 20:28
общий
Адресаты:
и выкидывает на dbgheap.c в месте приведенном выше
давно
Академик
20764
1861
17.05.2018, 20:55
общий
17.05.2018, 21:22
на исполнении?
Тогда совсем нехороший вопрос: зачем вам локальная функция с линковкой C?
Хотите подменить системную? Так точно не выйдет.
давно
Посетитель
402071
12
17.05.2018, 21:48
общий
Адресаты:
а где у меня эти функции?
давно
Посетитель
402071
12
17.05.2018, 21:51
общий
Адресаты:
я нечего кроме того есть в программе не писал
давно
Посетитель
402071
12
17.05.2018, 21:56
общий
Адресаты:
объясните что означает место куда меня выбрасывает и почему это может быть
давно
Академик
20764
1861
17.05.2018, 22:20
общий
Адресаты:
ну, покажите точную копию сообщения об ошибке. Тогда и разговор продолжится
давно
Посетитель
402071
12
17.05.2018, 22:35
общий
Адресаты:
я вам его уже два раза приводил ConsoleApplication83.exe вызвал срабатывание точки останова
давно
Посетитель
402071
12
17.05.2018, 22:38
общий
Адресаты:
и все
давно
Посетитель
402071
12
17.05.2018, 22:39
общий
не какого номера если вы об этом
давно
Посетитель
402071
12
17.05.2018, 22:48
общий
Адресаты:
вот файл внутри скрин экрана точнее не бывает
Прикрепленные файлы:
b6e7c73437172d42f5fd00473b188cc3.docx
давно
Советник
400484
472
18.05.2018, 10:06
общий
18.05.2018, 10:08
Насколько я вижу проблема в
Код:

tvector::~tvector()
{
//cout<<"y delete1\t";
/// if (d_v!=NULL){
//cout<<"y delete3\t";
delete d_v;
// cout<<"y delete2\t";
//ii=ii+1;
//cout<<"ii="<<ii;
}

delete d_v; - тут мы пытаемся удалить массив. А почему валится пока понят не могу...

P.S. По идеи удаления массива должно быть таким - delete [] d_v;
давно
Старший Модератор
17042
808
22.05.2018, 09:42
общий
Адресаты:
Оформите ответ? Приведя в качестве него Ваше сообщение в мини-форуме вопроса.
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Советник
400484
472
22.05.2018, 10:31
общий
это ответ
Здравствуйте, andrey.terekhin.96!
Насколько я вижу проблема в
Код:

tvector::~tvector()
{
//cout<<"y delete1\t";
/// if (d_v!=NULL){
//cout<<"y delete3\t";
delete d_v;
// cout<<"y delete2\t";
//ii=ii+1;
//cout<<"ii="<<ii;
}

delete d_v; - тут мы пытаемся удалить массив.
По идеи удаления массива должно быть таким - delete [] d_v;
Форма ответа