Newer
Older
c-interpreter / modules / main / src / main.cpp
Nomura Kei on 11 Jun 2023 2 KB UPDATE
#include <iostream>

#include <kcpp.hpp>
#include <kcpp_memory.hpp>


class MyListener : public kcpp::MemoryListener
{
	public:
		MyListener() {}
		~MyListener() {}
		void notifyError(const kcpp::MemoryEntry& entry, const char* msg)
		{
			std::cout << entry.file << ":" << entry.line << "(" << entry.func << "):[size=" << entry.size << "] "
				<< msg << std::endl;
		}

};

bool handler(const kcpp::MemoryEntry& entry)
{
	std::cout << "# " << entry.file << ":" << entry.line << ":(" << entry.size << ")" << std::endl;
	return false;
}

struct alignas(256) OverAligned {
	int val[8192];
	char cval[8192];
};
int main()
{

	MyListener listener;
	kcpp::MemoryManager::setListener(listener);

	char* tmp1 = new  char;
	char* tmp2 = new (std::nothrow) char;
	OverAligned* tmp3 = new OverAligned;
	tmp3->val[0] = 10;
	tmp3->val[8000] = 8010;
	tmp3->cval[0] = 'A';
	tmp3->cval[1] = '\0';
	std::cout << tmp3->cval << std::endl;
	char* tmp4 = new char[5];
	tmp4[0] = 'X';
	tmp4[1] = 'Y';
	tmp4[2] = 'Z';
	tmp4[3] = '\0';
	char* ptr = static_cast<char*>(malloc(10));
	char* ptr2 = static_cast<char*>(malloc(20));
	char* ptr3 = static_cast<char*>(realloc(ptr2, 15));
	char* ptr4 = static_cast<char*>(realloc(tmp1, 55));

std::cout << "#####################################" << std::endl;
//	kcpp::MemoryManager::entries(handler);
	kcpp::MemoryManager::dump(std::cout, 4, true, true, 80);	//, 100, true, true);
std::cout << "#####################################" << std::endl;
	kcpp::MemoryManager::freeif(handler);
std::cout << "#####################################" << std::endl;

//	free(ptr3);
std::cout << "-- 1" << std::endl;
	free(ptr4);
std::cout << "-- 2" << std::endl;
	free(tmp2);
std::cout << "-- 3" << std::endl;

	std::cout << "========== delete OverAligned" << std::endl;
	delete tmp3;
	std::cout << "========== END delete OverAligned" << std::endl;
//	operator delete(tmp3);

	std::cout << tmp4 << std::endl;

	std::cout << "========== delete tmp4[5]" << std::endl;
	delete[] tmp4;
	std::cout << "========== END delete tmp4[5]" << std::endl;

	(void)(ptr);
	(void)(ptr2);
	(void)(ptr3);
	(void)(ptr4);

	char* tmp5 = new char[100];
	tmp5[0] = 'A';
	tmp5[1] = '\0';
	std::cout << tmp5[0] << std::endl;
	delete [] tmp5;


	return 0;

}