Сегодня подруга обратилась за помощью по c++ лабе. Я по понятным причинам согласился
Итак, программа падает с нарушением целостности хипа.
Сорс:
Код:
// laba.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class massiv //объявили класс массив, блин
{ int len; //в нем создали блин два поля блин: первое типо ддлинна массива
int *p_mas; //второе епт указатель на начало массива
public :
massiv (int n) // конструктор , блин
{
int *p; //тут то мы и создаем наш массив
p= new int(n);
p_mas= p;
len=n;
for( ; p<p_mas+len ; p++) { //и заполняем его рандомными значениями
*p = rand()%100;
}
}
void display() // метод для вывода массива на экран
{ int *p;
for(p=p_mas ; p<p_mas+len ; p++)
cout<<(*p)<<'\n'; //берем и перебериаем все элементы массива и выводим их на епта экран
cout<<endl;
}
// вот тут то мы и начниаем нашу работу по переопределению конструкторов
void operator ++ () // перегруженный оператор «инкремент»
{ int *p; //этот операторт занимается тем, что ищет сумму в нашем массве всех чисел. сумму всех чисел.
int sum=0;
for(p=p_mas ; p<p_mas+len ; p++)
sum+=*p;
cout<<"sum="<<sum<<endl; //и выводит ее на экран
}
// а тут мы едрить переопределяем оператор деления, причем так что бы он не делил что-то то на что-то, а выбирал наименьшее или наибольше(смотри по заданию)
massiv operator % (massiv &b)
{int temp_len,*pb,*pthis,*ptemp;
if (len>b.len)
temp_len=b.len;
else
temp_len=len;
bool a=false;
massiv temp(temp_len); //типо создали и записываем все по правилам
for(pb=b.p_mas,pthis=p_mas,ptemp=temp.p_mas ; pb<b.p_mas+temp_len ; pb++,pthis++,ptemp++)
{
if(a) { *ptemp=*pb>*pthis?*pb:*pthis; }
else { *ptemp=*pb<*pthis?*pb:*pthis; }
a=!a;
}
return temp;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
int i;
massiv S(10),D(5),SUM(10); //создаем три объекта класса
cout<<"----massiv S ---" <<endl;
S.display(); //выводим на экран первый
S++; //считаем сумму его элементов и вывводим ее на экран
cout<<"----massiv S ---" <<endl;
S.display(); //снова выводим первый на экран
cout<<"----massiv D ---" <<endl;
D.display(); //выводим второй на экран
cout<<"---spec---\n"<<endl;
SUM=S%D; //создаем третий из первых двух
SUM.display(); // и тип выводим его на экран
cin>>i;
return 0;
}
Честно, пропарился с ней минут 20, повреждение происходит либо при выделении памяти под первый массив, то ли при его заполнении. И то и то проверил, всё по книжкам. Решил выделять память под массив классически через malloc и собственно всё заработало. Неужели проблема в конструкторе?
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.