Commit 7260e0a6 by Szeberényi Imre

v0

parents
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="CppEmber" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/CppEmber" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
<Add option="-DMEMTRACE" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/CppEmber" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-pedantic" />
<Add option="-Wall" />
<Add option="-Werror" />
</Compiler>
<Unit filename="ember.cpp" />
<Unit filename="ember.h" />
<Unit filename="emberMain.cpp" />
<Unit filename="gtest_lite.h" />
<Unit filename="hallgato.cpp" />
<Unit filename="hallgato.h" />
<Unit filename="kutato.h" />
<Unit filename="memtrace.cpp" />
<Unit filename="memtrace.h" />
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{B6BCC2EF-D183-45F8-BBD5-63B90361DAF4}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>CppEmber</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;MEMTRACE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="ember.cpp" />
<ClCompile Include="emberMain.cpp" />
<ClCompile Include="hallgato.cpp" />
<ClCompile Include="memtrace.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="ember.h" />
<ClInclude Include="gtest_lite.h" />
<ClInclude Include="hallgato.h" />
<ClInclude Include="kutato.h" />
<ClInclude Include="memtrace.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="ember.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="hallgato.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="memtrace.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="emberMain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ember.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="gtest_lite.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="hallgato.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="kutato.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="memtrace.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file
#
# Makefile a CppEmber feladathoz
#
# MEMTRACE-hez:
CXXFLAGS = -g -Wall -Werror -pedantic -DMEMTRACE
# Mpatrol-hoz:
#CXXFLAGS = -g -Wall -Werror -pedantic
LIBMPATROL = -lmpatrol -lbfd
OBJS = ember.o hallgato.o emberMain.o
# Ez a default cel
.PHONY: all
all: main_mtrac
# Nincs mem ellenorzes
main: $(OBJS)
$(CXX) $(CXXFLAGS) $(OBJS) -o $@
# MPATROL valtozat
main_mpat: $(OBJS)
$(CXX) $(CXXFLAGS) $(OBJS) $(LIBMPATROL) -o $@
# MEMTRACE
main_mtrac: $(OBJS) memtrace.o
$(CXX) $(CXXFLAGS) $(OBJS) memtrace.o -o $@
#-------------
ember.o: ember.cpp ember.h
hallgato.o: hallgato.cpp hallgato.h ember.h
emberMain.o: emberMain.cpp hallgato.h ember.h kutato.h gtest_lite.h
memtrace.o: memtrace.cpp memtrace.h
clean:
rm -f *.o *.log main main_mpat main_mtrac
check: main_mpat
MPATROL_OPTIONS=LEAKTABLE ./main_mpat
/*
* \file ember.cpp
*
* Ember osztály tagfüggvényeinek definíciója
* Nevet, születési évet tárol.
* A nevet dinamikusan, \0-lal lezárt karaktersorozatként tárolja.
*/
#include <cstring>
#include "memtrace.h"
#include "ember.h"
/// Ez az alapértelmezett konstruktor is
/// @param n - név (alapértelmezése a saját Neptun kódja)
/// @param ev - születési év (alapértelmezésben a saját születései éve)
Ember::Ember(const char* n, int ev) :szulEv(ev) {
nev = new char[strlen(n)+1];
strcpy(nev, n);
}
/// Másoló konstruktor
Ember::Ember(const Ember& e) :nev(NULL) {
*this = e;
}
/// Értékadó operátor
Ember& Ember::operator=(const Ember& e) {
if (this != &e) {
delete[] nev;
nev = new char[strlen(e.nev)+1];
strcpy(nev, e.nev);
szulEv = e.szulEv;
}
return *this;
}
/// Név lekérdezése
const char* Ember::getNev() const {
return nev;
}
/// Adott évben betöltött kor lekérdezése
/// @param ev - adott év, amelyikben a betöltött életkort vizsgáljuk
/// Nem vizsgálja, hogy megszületett-e
int Ember::getKor(int ev) const {
return ev - szulEv;
}
/// Foglalkozás lekérdezése
const char* Ember::foglalkozas() const {
return "Meg nincs";
}
/// Destruktor
Ember::~Ember() {
delete[] nev;
}
/*
* \file emberMain.cpp
*
* Tesztprogram az Ember, Hallgato és a Kutato osztályok teszteléséhez.
*
* Értse meg a programot és készítse el az ember.h állományt!
*
* Megj: A nagy házi feladat teszteléséhez is hasonló tesztelési metódust ajánlunk.
*
*
*** FONTOS ***
* A MEMTRACE makrónak minden fordítási egységben definiált kell, hogy legyen!
* Ezt legkényelmesebben projekt szintű beállítással tudja elérni.
* (Projekt->Build options->#defines)
*
*/
#include <iostream>
#include <ctime>
#include "ember.h"
#include "hallgato.h"
#include "kutato.h"
#include "gtest_lite.h" // tesztelést segítő makrók
#include "memtrace.h"
using std::cout;
using std::endl;
using std::cin;
// Segédfüggvény a beolvasások előtti üzenetek kiírásához
// JPORTA-n nem kérünk ilyen kiírásokat
inline void prompt(const char *msg) {
#ifndef CPORTA
cout << msg;
#endif // CPORTA
}
// Ember referenciát kap. kiír és ellenőriz
void kiirEll(Ember& e, int ma, const char* nev, const char *fogl, int szul) {
EXPECT_STREQ(nev, e.getNev());
cout << "Nevem: " << e.getNev() << endl;
EXPECT_EQ(ma-szul, e.getKor(ma));
cout << "Korom: " << e.getKor(ma) << endl;
EXPECT_STREQ(fogl, e.foglalkozas()) << "!** virtualis a foglalkozas?" << endl;
cout << "Foglalkozasom: " << e.foglalkozas() << endl;
EXPECT_EQ(2020-szul, e.getKor(2020));
cout << "2020-ban " << e.getKor(2020) << " eves leszek" << endl;
cout << endl;
}
// Ember pointert kap. kiír és ellenőriz
void kiirEllp(Ember *p, int ma, const char* nev, const char *fogl, int szul) {
EXPECT_STREQ(nev, p->getNev());
cout << "Nevem: " << p->getNev() << endl;
EXPECT_EQ(ma-szul, p->getKor(ma));
cout << "Korom: " << p->getKor(ma) << endl;
EXPECT_STREQ(fogl, p->foglalkozas());
cout << "Foglalkozasom: " << p->foglalkozas() << endl;
EXPECT_EQ(2020-szul, p->getKor(2020));
cout << "2020-ban " << p->getKor(2020) << " eves leszek" << endl;
cout << endl;
}
// Ember adattagjainak láthatósági tesztje
// Hallgató nevének (neptun) tesztje
void test_1(int ma) {
TEST(test1, kiir) { // lehetne finomabban a teszteket
Hallgato en;
cout << "Nevem: " << en.getNev() << endl;
cout << "Korom: " << en.getKor(ma) << endl;
EXPECT_STREQ("Hallgato", en.foglalkozas());
cout << "Foglalkozasom: " << en.foglalkozas() << endl;
cout << "2020-ban " << en.getKor(2020) << " eves leszek" << endl << endl;
} ENDM
}
// Hallgató teszt ember referenciával
void test_2(int ma) {
TEST(tesz2, kiir) {
Hallgato butus("Buta Toni", "BT1234", 1975);
kiirEll(butus, ma, "Buta Toni", "Hallgato", 1975); // kiírja és ellenőrzi az adatokat
} ENDM
}
// másoló konstruktor és a kivételkezelés működésének ellenőrzése
void test_3(int ma) {
TEST(test3, kiir) {
Hallgato toni("Okos Toni", "TUDOR6", 1970);
Hallgato valaki = toni; // másoló konstruktor próba
EXPECT_STREQ("TUDOR6", valaki.getNeptun()); // lemásolódott a neptun is? Ki másolta le?
Ember *okos = &valaki;
kiirEllp(okos, ma, "Okos Toni", "Hallgato", 1970); // kiírja és ellenőrzi az adatokat
// Azt várjuk, hogy kivételt dobjon
EXPECT_THROW(cout << okos->getKor(1900), const char*) << "!** virtualis a getkor?" << endl;
cout << "1900-ban hany eves voltal?" << endl;
cout << okos->getKor(1900) << endl;
} ENDM // nem jut ide a kivétel miatt
}
// Komplex teszt
void test_4(int ma) {
TEST(test4, kkir) {
Hallgato en; // Annak a NEPTUN-kódja és születési éve, aki az Ember osztályt készítette
Hallgato toni("Okos Toni", "TUDOR6", 1970);
Hallgato butus("Buta Toni", "BT1234", 1975);
Hallgato valaki = butus; // másoló konstruktor próba
Kutato cppFather("Bjarne Stroustrup", 1950);
toni = toni; // értékadás önmagának
en = valaki; // értékadás
EXPECT_STREQ("BT1234", en.getNeptun()); // lemásolódott a neptun is? Ki másolta le?
kiirEll(en, ma, "Buta Toni", "Hallgato", 1975);
kiirEll(cppFather, ma, "Bjarne Stroustrup", "Kutato", 1950); // értékparaméterként kapja
Ember *gatto = new Hallgato("Hall Gatto", "GAT123", 1987); // dinamikus példány
kiirEll(*gatto, ma, "Hall Gatto", "Hallgato", 1987);
kiirEll(toni, ma, "Okos Toni", "Hallgato", 1970);
EXPECT_STREQ("TUDOR6", toni.getNeptun()); // neptun is jó?
// dinamikus példány törlése alaposztály pointerére hivatkozva
cout << "Megszuntetes is megy az alaposztaly felol?" << endl;
cout << "Kiderul, ha kilep a programbol!" << endl << endl;
delete gatto;
} ENDM
}
int main() {
Ember e;
time_t act = time(NULL);
struct tm *lt = localtime(&act);
int ma = lt->tm_year+1900;
int testNr;
const char *prompt_txt = "Teszteset (1-4) (0: vege): ";
prompt(prompt_txt);
while (cin >> testNr && testNr != 0) { // * 0-ig, vagy amíg tud számot olvasni
try {
switch (testNr) {
case 1: test_1(ma); break;
case 2: test_2(ma); break;
case 3: test_3(ma); break;
case 4: test_4(ma); break;
}
} catch (const char *p) {
cout << p << endl << endl;
} catch (...) {
cout << "Baj van!" << endl;
}
cout << endl;
prompt(prompt_txt);
}
return 0;
}
This diff is collapsed. Click to expand it.
/*
* \file hallgato.cpp
*
* Hallgato osztály tagfüggvényeinek definíciója
*/
#include <cstring>
#include "ember.h"
#include "hallgato.h"
/// Konstruktorok
/// Paraméter nélkül hívható konstr.
Hallgato::Hallgato() :kepzes("Nappali") {
strncpy(neptun, "KODKOD", NEP_L); // Mi a helyzet a névvel és a szül. évvel?
}
/// 3 paraméteres konstr.
/// @param n - név
/// @param nep - neptun
/// @param ev - születési év
Hallgato::Hallgato(const char *n, const char *nep, int ev) :Ember(n, ev), kepzes("Nappali") {
strncpy(neptun, nep, NEP_L);
}
/// Adott évben betöltött kor lekérdezése
/// @param ev - adott év, amelyikben a betöltött életkort vizsgáljuk
/// const char * hibát dob, ha az adott év korábbi mint a születési év
int Hallgato::getKor(int ev) const {
if (szulEv > ev)
throw "meg sem szulettem!";
return Ember::getKor(ev);
}
/// Foglalkozás lekérdezése
const char* Hallgato::foglalkozas() const {
return "Hallgato";
}
/*
* \file hallgato.h
*
* Hallgato osztály deklarációja
*/
#ifndef HALLGATO_H
#define HALLGATO_H
#include <iostream> // a NULL miatt
#include <string>
#include "ember.h"
/**
* Hallgato osztály.
* neptun kód fix méretű tömbben
*/
class Hallgato :public Ember {
public:
/// NEPTUN kód hossza
static const int NEP_L = 6+1;// static const inicializálható így
private:
char neptun[NEP_L]; // + lezáró nullával
std::string kepzes; // képzés típusa most mindenkinél nappali
// jelenleg nem használjuk
public:
/// Konstruktorok
/// Paraméter nélkül hívható konstr.
Hallgato();
/// 3 paraméteres konstr.
/// @param n - név
/// @param nep - neptun
/// @param ev - születési év
Hallgato(const char *n, const char *nep, int ev);
/// neptun kód lekérdezése
const char *getNeptun() const { return neptun; }
/// Adott évben betöltött kor lekérdezése
/// @param ev - adott év, amelyikben a betöltött életkort vizsgáljuk
/// const char * hibát dob, ha az adott év korábbi mint a születési év
int getKor(int ev) const;
/// Foglalkozás lekérdezése
const char* foglalkozas() const;
};
#endif
/*
* \file kutato.h
*
* Kutato osztály deklarációja
* Az egyszerűség kedvéért minimális funkcionalitás, inline függvényekkel.
*/
#ifndef KUTATO_H
#define KUTATO_H
#include "ember.h"
class Kutato :public Ember {
public:
/// Konstruktor
/// @param n - név
/// @param ev - születési év
Kutato(const char *n, int ev) :Ember(n, ev) {}
/// Foglalkozás lekérdezése
const char* foglalkozas() const { return "Kutato"; }
};
#endif
This diff is collapsed. Click to expand it.
/*********************************
Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013.,
VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016.
inclue-ok: 2017., 2018. 2019.
*********************************/
#ifndef MEMTRACE_H
#define MEMTRACE_H
#if defined(MEMTRACE)
/*ha definiálva van, akkor a hibakat ebbe a fajlba írja, egyébkent stderr-re*/
/*#define MEMTRACE_ERRFILE MEMTRACE.ERR*/
/*ha definialva van, akkor futas kozben lancolt listat epit. Javasolt a hasznalata*/
#define MEMTRACE_TO_MEMORY
/*ha definialva van, akkor futas kozben fajlba irja a foglalasokat*/
/*ekkor nincs ellenorzes, csak naplozas*/
/*#define MEMTRACE_TO_FILE*/
/*ha definialva van, akkor a megallaskor automatikus riport keszul */
#define MEMTRACE_AUTO
/*ha definialva van, akkor malloc()/calloc()/realloc()/free() kovetve lesz*/
#define MEMTRACE_C
#ifdef MEMTRACE_C
/*ha definialva van, akkor free(NULL) nem okoz hibat*/
#define ALLOW_FREE_NULL
#endif
#ifdef __cplusplus
/*ha definialva van, akkor new/delete/new[]/delete[] kovetve lesz*/
#define MEMTRACE_CPP
#endif
#if defined(__cplusplus) && defined(MEMTRACE_TO_MEMORY)
/*ha definialva van, akkor atexit helyett objektumot hasznal*/
/*ajanlott bekapcsolni*/
#define USE_ATEXIT_OBJECT
#endif
/******************************************/
/* INNEN NE MODOSITSD */
/******************************************/
#ifdef NO_MEMTRACE_TO_FILE
#undef MEMTRACE_TO_FILE
#endif
#ifdef NO_MEMTRACE_TO_MEMORY
#undef MEMTRACE_TO_MEMORY
#endif
#ifndef MEMTRACE_AUTO
#undef USE_ATEXIT_OBJECT
#endif
#ifdef __cplusplus
#define START_NAMESPACE namespace memtrace {
#define END_NAMESPACE } /*namespace*/
#define TRACEC(func) memtrace::func
#include <new>
#else
#define START_NAMESPACE
#define END_NAMESPACE
#define TRACEC(func) func
#endif
// THROW deklaráció változatai
#if defined(_MSC_VER)
// VS rosszul kezeli az __cplusplus makrot
#if _MSC_VER < 1900
// * nem biztos, hogy jó így *
#define THROW_BADALLOC
#define THROW_NOTHING
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#else
#if __cplusplus < 201103L
// C++2003 vagy régebbi
#define THROW_BADALLOC throw (std::bad_alloc)
#define THROW_NOTHING throw ()
#else
// C++11 vagy újabb
#define THROW_BADALLOC noexcept(false)
#define THROW_NOTHING noexcept
#endif
#endif
START_NAMESPACE
int allocated_blocks();
END_NAMESPACE
#if defined(MEMTRACE_TO_MEMORY)
START_NAMESPACE
int mem_check(void);
END_NAMESPACE
#endif
#if defined(MEMTRACE_TO_MEMORY) && defined(USE_ATEXIT_OBJECT)
#include <cstdio>
START_NAMESPACE
class atexit_class {
private:
static int counter;
static int err;
public:
atexit_class() {
#if defined(CPORTA) && !defined(CPORTA_NOSETBUF)
if (counter == 0) {
setbuf(stdout, 0);
setbuf(stderr, 0);
}
#endif
counter++;
}
int check() {
if(--counter == 0)
err = mem_check();
return err;
}
~atexit_class() {
check();
}
};
static atexit_class atexit_obj;
END_NAMESPACE
#endif/*MEMTRACE_TO_MEMORY && USE_ATEXIT_OBJECT*/
/*Innentol csak a "normal" include eseten kell, kulonben osszezavarja a mukodest*/
#ifndef FROM_MEMTRACE_CPP
#include <stdlib.h>
#ifdef __cplusplus
#include <iostream>
/* ide gyűjtjük a nemtrace-vel összeakadó headereket, hogy előbb legyenek */
#include <fstream> // VS 2013 headerjében van deleted definició
#include <sstream>
#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#endif
#ifdef MEMTRACE_CPP
namespace std {
typedef void (*new_handler)();
}
#endif
#ifdef MEMTRACE_C
START_NAMESPACE
#undef malloc
#define malloc(size) TRACEC(traced_malloc)(size,#size,__LINE__,__FILE__)
void * traced_malloc(size_t size, const char *size_txt, int line, const char * file);
#undef calloc
#define calloc(count,size) TRACEC(traced_calloc)(count, size, #count","#size,__LINE__,__FILE__)
void * traced_calloc(size_t count, size_t size, const char *size_txt, int line, const char * file);
#undef free
#define free(p) TRACEC(traced_free)(p, #p,__LINE__,__FILE__)
void traced_free(void * p, const char *size_txt, int line, const char * file);
#undef realloc
#define realloc(old,size) TRACEC(traced_realloc)(old,size,#size,__LINE__,__FILE__)
void * traced_realloc(void * old, size_t size, const char *size_txt, int line, const char * file);
void mem_dump(void const *mem, size_t size, FILE* fp);
END_NAMESPACE
#endif/*MEMTRACE_C*/
#ifdef MEMTRACE_CPP
START_NAMESPACE
#undef set_new_handler
#define set_new_handler(f) TRACEC(_set_new_handler)(f)
void _set_new_handler(std::new_handler h);
void set_delete_call(int line, const char * file);
END_NAMESPACE
void * operator new(size_t size, int line, const char * file) THROW_BADALLOC;
void * operator new[](size_t size, int line, const char * file) THROW_BADALLOC;
void * operator new(size_t size) THROW_BADALLOC;
void * operator new[](size_t size) THROW_BADALLOC;
void operator delete(void * p) THROW_NOTHING;
void operator delete[](void * p) THROW_NOTHING;
/* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelő delete, bár senki sem használja */
void operator delete(void *p, int, const char *) THROW_NOTHING;
void operator delete[](void *p, int, const char *) THROW_NOTHING;
#define new new(__LINE__, __FILE__)
#define delete memtrace::set_delete_call(__LINE__, __FILE__),delete
#ifdef CPORTA
#define system(...) // system(__VA_ARGS__)
#endif
#endif /*MEMTRACE_CPP*/
#endif /*FROM_MEMTRACE_CPP*/
#endif /*MEMCHECK*/
#endif /*MEMTRACE_H*/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment