Форум программистов, компьютерный форум 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:31     Утечка памяти (Expression: _CrtIsValidHeapPointer(pUserData))
Цитата Сообщение от Avazart Посмотреть сообщение
Builder справляется с предложеным кодом
С теми двумя тестовыми классами в сферическом вакууме все в полном порядке))

Проблемы начинаются в многофайловом проекте. А если там ещё и иерархия очень развитая - там вообще без 100 грамм потом не разберёшься.

Попробуй протестировать вот такую вещь:

Предположим, что данный класс - один из многих в большой-большой системе:

//CAgent.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef CAgent_h
#define CAgent_h
 
//интеллектуальный шаристый указатель.
#include "ConstCode/Template/TSharedPointer.h"
 
class Test;
typedef TSharedPointer< Test > pTest_t;
 
class Agent
{
public:
    Agent();
    ~Agent();
    pTest_t GetTest()const;   
private:
    pTest_t mpTest;  //наш подопытный кролик
};
 
#endif
//CAgent.cpp
C++ (Qt)
1
2
3
4
5
#include "Test.h"
 
Agent::Agent(){ mpTest = new Test();}
Agent::~Agent(){}
pTest_t Agent::GetTest()const{ return mpTest; }
//Test.h

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef Test_h
#define Test_h
 
#include <iostream>
struct test2
{
    ~test2() { std::cout <<"dtor\n";  }
};
 
class Test
{
public:
    void Work();
    test2 tmp;
};
#endif
//main.cpp
C++ (Qt)
1
2
3
4
5
6
7
int main()
{
    Agent agent;
 
    pTest_t gm; 
    gm = agent.GetTest(); 
}

Собственно, попадаем во внутрь интеллектуального указателя:


C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
void_TSharedPointer::Release() 
{   
    if(mp_CounterLink==0)  { return; }
    --(*mp_CounterLink);
    if( (*mp_CounterLink)==0 ) 
    { 
    //: warning C4150: удаление указателя на неполный тип 'Test'; деструктор не вызван
        delete mp_CounterLink; delete mp_Pointer; 
    }
    Clear();
}
Справедливости ради, стоит заметить, что в бустовских умных указателях учли этот нюанс. Там стоит защита. Если нечто подобное будет иметь место быть - будет ошибка времени компиляции, но я сам не проверял.
 
Текущее время: 00:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru