Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

solowey
Статус: Бакалавр
Рейтинг: 314
∙ повысить рейтинг »
zdwork
Статус: 3-й класс
Рейтинг: 73
∙ повысить рейтинг »
CradleA
Статус: Профессор
Рейтинг: 43
∙ повысить рейтинг »

∙ С / С++

Номер выпуска:1964
Дата выхода:18.09.2019, 17:45
Администратор рассылки:Андрей Кузнецов aka Dr_Andrew (Старший модератор)
Подписчиков / экспертов:48 / 35
Вопросов / ответов:3 / 9

Консультация # 25099: Здравствуйте, уважаемые эксперты. Необходимо удалить часть динамической памяти(с некоторого значения и доконца), отавив при этом содержимое по тому же адрессу. Vars = new byte[1000]; ........ Index = 1000 - SizeOfVars; Buffer = (char*)((int)Vars + SizeOfVars); delete[Index](byte*)Buffer; Данный код выдает ошибку (Адрес...
Консультация # 96788: Скажите, можно ли сделать ф-ю main членом-функцией какого-либо класса ? Если да,то привмдите пример....
Консультация # 72936: Здравствуйте, уважаемые эксперты. В приложении находится код, который почему то не компилируется. (M$ Visual C++ 6.0). Ошибка линковки: main.obj : error LNK2001: unresolved external symbol "public: __thiscall Matrix<int>::MatrixRow<int>::MatrixRow<int>(unsigned int)" (??0?$MatrixRow@H@?$Matrix@H@@QAE@I@Z) Та...

Консультация # 25099:

Здравствуйте, уважаемые эксперты.
Необходимо удалить часть динамической памяти(с некоторого значения и доконца), отавив при этом содержимое по тому же адрессу.
Vars = new byte[1000];
.......
Index = 1000 - SizeOfVars;
Buffer = (char*)((int)Vars + SizeOfVars);
delete[Index](byte*)Buffer;
Данный код выдает ошибку (Адресса и все переменные настроены верно)
Debug Assertion Failed
......
Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Работаю под Windows. Подскажите что можно сделать, может возможна более эффективная работа с динамической памятью?
Спасибо.

Дата отправки: 19.08.2005, 20:32
Вопрос задал: Ivaan
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Ddeedd:

Здравствуйте, Ivaan!

Хотелось бы уточнить, компиляторы C/C++ для стандарта C/C++ версии 2.0 и более забивают на цифру, указанную у delete [] в скобках и убивают массив всегда целиком, но для этого им всегда нужен оригинальный адрес, который был вернут оператором new. Вы подсовываете инвалидный адрес - отсюда и глюк. (только delete [] Vars - будет работать). Если хотите изменять размер выделенного участка памяти, можете использовать WinAPI-шные различные аллоки, вроде LocalAlloc/LocalFree/LocalReAlloc, GlobalAlloc/GlobalFree/GlobalReAlloc, VirtualAlloc/VirtualFree, но от использования new/delete придеться отказаться.

Приложение:

Консультировал: Ddeedd
Дата отправки: 19.08.2005, 23:03
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Raptor1:

Здравствуйте, Ivaan!
Не выйдет, удалить можно только весь блок т.е. то что выделил
delete [] Vars;
причем в [] не надо ничего писать,
если хоешь удалить кусок то надо или выделить буфер заново и скопировать туда то что тебе надо или писать нестандартное управление памятью.

Консультировал: Raptor1
Дата отправки: 19.08.2005, 23:47
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 96788:

Скажите, можно ли сделать ф-ю main членом-функцией какого-либо класса ? Если да,то привмдите пример.

Дата отправки: 31.07.2007, 00:25
Вопрос задал: Денскевич Р
Всего ответов: 5
Страница онлайн-консультации »


Консультирует estiGi:

Здравствуйте, Денскевич Р!
Нельзя, потому что функция main вызывается снаружи (функцией mainCRTStartup или WinMainCRTStartup), и вызывается она как функция глобальная.
А для того, чтобы вызвать любую функцию класса, нужно как минимум его имя. Естессно, снаружи оно не известно.
Возможно, так можно устроить, используя хитрые заморочки с дефайнами, тайпдефами, подменой адреса.... но честных, документированных путей нет, насколько я знаю

Консультировал: estiGi
Дата отправки: 31.07.2007, 01:04
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Терсков Сергей:

Здравствуйте, Денскевич Р!
Конкретно саму глобальную функцию main конечно нельзя. По стандарту ее вызов проводится именно как глобальный. Но сделать у какого-либо класса функцию main вам никто не мешает. Например как в приложении

Приложение:

Консультировал: Терсков Сергей
Дата отправки: 31.07.2007, 03:19
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Ole:

Здравствуйте, Денскевич Р!
Категорически нет.

Консультировал: Ole
Дата отправки: 31.07.2007, 06:12
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Степанов Вадим Анатольевич:

Здравствуйте, Денскевич Р!
В С/С++ - нельзя, в отличие от C#, где это - необходимое условие.

Консультировал: Степанов Вадим Анатольевич
Дата отправки: 31.07.2007, 08:11
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует kool:

Здравствуйте, Денскевич Р!
Так, например,

#include
class A{
int main(){
return -1;
}
};

int main(){
return -1;
}
Удачи!

Консультировал: kool
Дата отправки: 31.07.2007, 19:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 72936:

Здравствуйте, уважаемые эксперты.
В приложении находится код, который почему то не компилируется. (M$ Visual C++ 6.0). Ошибка линковки:
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Matrix<int>::MatrixRow<int>::MatrixRow<int>(unsigned int)" (??0?$MatrixRow@H@?$Matrix@H@@QAE@I@Z)
Такое впечатление, что я как-то неправильно определил конструктор вложенного класса. Если этот конструктор определить сразу в описании класса, не вынося его отдельно - все работает. Вопрос - почему?
Заранее спасибо.

Дата отправки: 27.01.2007, 23:09
Вопрос задал: Алексеев В.В.
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Базанов Иван Александрович:

Здравствуйте, Алексеев В.В.!
К сожалению , как описано в MSDN, для MSVC, их реализация ДОЛЖНА быть описана в h-файле (заголовочном файле). Иначе проект не слинкуется.
Ответ - таков MSVC. Если угодно - глюк (или фича) :)

Консультировал: Базанов Иван Александрович
Дата отправки: 27.01.2007, 23:24
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Neil:

Здравствуйте, Алексеев В.В.!

Зачем Вам вообще вложенный класс? Нет возможности проверить, но есть подозрение, что в описании класса нужно выкинуть внутренний template.. (см. приложение)

Приложение:

Консультировал: Neil
Дата отправки: 28.01.2007, 00:25
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное