Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2014, 19:05   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию перегрузка new

Почему мусор выводится??
Что такое size_t??

Код:
#include <iostream>
#include <conio.h>
using namespace std;

void* operator new(size_t size){
	char* pointer;
	pointer = (char*) malloc(size);
	if (size > strlen( "U4ims9 programmirovat' na 9zike C++!"))
           strcpy(pointer, "U4ims9 programmirovat' na 9zike C++!");
	return(pointer);
}

    
void main(void){
	char* str = new char[100];
	cout << str << endl;

	char ch = getchar();
}
zla9_kolu4ka вне форума Ответить с цитированием
Старый 04.03.2014, 19:15   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

size_t беззнаковый тип, по типу unsigned int
MaTBeu вне форума Ответить с цитированием
Старый 04.03.2014, 19:20   #3
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

почему код не заходит в перегруженную функцию new?
zla9_kolu4ka вне форума Ответить с цитированием
Старый 04.03.2014, 19:41   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

VS говорит, что new не может быть переопределен, но может быть перегружен:
Код:
#include <iostream>
#include <conio.h>
using namespace std;

void* operator new[](size_t size, char *){
	char* pointer;
	pointer = (char*) malloc(size);
	if (size > strlen( "U4ims9 programmirovat' na 9zike C++!"))
		strcpy(pointer, "U4ims9 programmirovat' na 9zike C++!");
	return(pointer);
}

void main(void){
	char* str = new("uu") char[100];
	cout << str << endl;

	char ch = getchar();
}
т.е, как видите, объявление new немножко другое.
Smogg вне форума Ответить с цитированием
Старый 04.03.2014, 19:56   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

А зачем второй char* параметр у new? Абсолютно лишний.
waleri вне форума Ответить с цитированием
Старый 04.03.2014, 19:57   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от zla9_kolu4ka Посмотреть сообщение
почему код не заходит в перегруженную функцию new?
Потому что вы перегрузили new а вызываете new[] - это разные вещи. Кроме того, переопределив new надо переопределять и delete.
waleri вне форума Ответить с цитированием
Старый 04.03.2014, 20:05   #7
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А зачем второй char* параметр у new? Абсолютно лишний.
Дейсвитно. Сча убрал и заработало. А сначала - ни хатело
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перегрузка new f.hump Общие вопросы C/C++ 6 10.04.2013 17:23
Перегрузка в С++ cj_loman Помощь студентам 0 19.05.2011 04:54
Перегрузка + Blad47 Помощь студентам 4 21.03.2011 01:49
Перегрузка в C++ Паыел Общие вопросы C/C++ 0 07.12.2010 16:26
Перегрузка в С++ anna01 Помощь студентам 1 24.11.2010 12:52