Форум программистов, компьютерный форум CyberForum.ru

Утечка памяти (Expression: _CrtIsValidHeapPointer(pUserData)) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дано целое число в диапазоне 10–40 http://www.cyberforum.ru/cpp-beginners/thread565037.html
Дано целое число в диапазоне 10–40, определяющее количество учебных заданий по некоторой теме. Вывести строку-описание указанного количества заданий, обеспечив правильное согласование числа со словами «учебное задание», например: 18 — «восемнадцать учебных заданий», 23 — «двадцать три учебных задания», 31 — «тридцать одно учебное задание».
C++ Соединение строки с числом Есть строка char* a = "str". Как можно соединить ее с числом, чтобы получилось str1, str2 ... strN? Т.е. все это проходит в цикле. Пробовал strcat и strcpy, но не получается. http://www.cyberforum.ru/cpp-beginners/thread565030.html
C++ Заполнение и сохранение массива структур не работает...
Я хочу сделать справочник кулинарных рецептов, (в него входит: название рецепта, ингредиенты(это у меня и вызывает затруднение) и приготовление). Все было бы хорошо, НО ингредиентов может быть несколько, и в каждом рецепте их число может меняться... Как это реализовать? Я думал что через структуру, но выдает странные ошибки... struct files { char Name; char Recept; int nkeys; } File;
C++ Параллельные вычисления MPI
Всем привет, ребят объясните пожалуйста почему работает не корректно ? задание такое : нужно посчитать сумму элементов 2х массивов, число элементов произвольное, число процессов тоже. вычисление суммы необходимо разбить на процессы, а потом что бы каждый процесс передал свою частную сумму на 0ой процесс который собственно и выведет результат на экран, вот что сам написал. если задаю 2...
C++ Дано предложение. Создать файл и записать в него все символы данного предложения, отличные от цифр. Вывести содержимое файла на экран http://www.cyberforum.ru/cpp-beginners/thread565013.html
Ребята, помогите, пожалуйста!
C++ Непонятны некоторые операторы Читал, читай книгу по C++. Что понял что нет. Пожалуйста помогите с такими вопросами: - Для чего нужна операция "?:" ?, я этого не понял. - пожалуйста обьясните русским языком что такое перегрузка операции... Ничего не понял по этому поводу. -пожалуйста обьясните про работу операций New и Delete и чем они отличаются от обычного обьявиения переменной? Пишите не стесняйтесь, буду рад абсолютно... подробнее

Показать сообщение отдельно
Bers
Заблокирован
05.05.2012, 21:00     Утечка памяти (Expression: _CrtIsValidHeapPointer(pUserData))
Цитата Сообщение от Avazart Посмотреть сообщение
И если вы не не выделяете память динамически то деструкторы нафиг не нужны потому как освобождать нечего.
Деструкторы не просто нужны. Они в принципе нужны. Без деструктора вся приплюснутая ОО-архитектура сразу же пойдёт крахом. Этим объясняется тот факт, что если программист сам не укажет деструктор, то за него его автоматически сгенерирует компилятор.

Но есть нюансы: компилятор не всегда способен создать деструктор корректно. Это связано с сложностями парсинга кода на с++. В результате:

Смотри:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef Test_h
#define Test_h
 
#include <iostream>
struct test2
{
    ~test2() { std::cout <<"dtor\n";  }  //по факту вызван не будет
};
 
class Test
{
public:
    void Work();
    test2 tmp;    //мембер не будет корректно разрушен. Утечка ресурсов
};
 
#endif
C++
1
: warning C4150: удаление указателя на неполный тип 'Test'; деструктор не вызван
Причем, по стандарту компиляторы не обязаны пасти такую ситуацию. Это называется "хорошо отделался", если хотя бы варнинг получил. А вот под линуксом QtCreator даже ухом не повел. Если бы под винду не начали портировать - и знать бы не знали, что у нас ресы утекают.

На месте тестовой болванки может оказаться какой нибудь вектор, или ещё что нибудь этакое.
У них не будет вызван деструктор, и они не освободят захваченные ресурсы.

И ладно, если это просто утечка памяти, а если там какие то особо важные ресурсы были под контролем?

А все потому, что человек поленился один раз написать явный деструктор (пусть даже пустой).

/зы: взял себе за правило: всегда писать явный дестурктор, и не иметь проблем.
 
Текущее время: 20:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru