|
|
|
выделение памяти
|
|||
|---|---|---|---|
|
#18+
Привет всем! Пишу на VS2005, C++, Win32. Проблема: Делаю примерно такую вещь: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Также: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. случайные - то работает, то нет. Никто ничего не слышал на этот счет? Заранее признателен за комментарии. автор автор[SRC c++][/SRC] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 20:09 |
|
||
|
выделение памяти
|
|||
|---|---|---|---|
|
#18+
В первом исходнике инициализации экземпляра "*a" вообще не происходит. Во втором исходнике проблема обозначена неясно. Что за ошибки. Утечка? Нехватка? И вообще код написан "подозрительно". Хотелось-бы узнать почему автор решил использовать ссылочные переменные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 21:26 |
|
||
|
выделение памяти
|
|||
|---|---|---|---|
|
#18+
В общем, в первом случае создаются объекты "B" и "С" ("С" - без инициализации атрибута типа "A"), затем для объекта типа "B" вызывается метод, который инициализирует "C->a". Ссылочные переменные - почему бы и нет? В функцию передал адрес, а не указатель - для сокращения записи. Может быть конечно это рикошет от других ошибок в коде. Сейчас не уверен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 21:54 |
|
||
|
выделение памяти
|
|||
|---|---|---|---|
|
#18+
guestedВ общем, в первом случае создаются объекты "B" и "С" ("С" - без инициализации атрибута типа "A"), затем для объекта типа "B" вызывается метод, который инициализирует "C->a". 1) Кто и где будет вызывать метод init? Может быть конечно это рикошет от других ошибок в коде. Сейчас не уверен 2) Давайте достигнем стабилизации ошибки. Тоесть я прошу вас создать ситуацию, когда ошибка 100% возникает при каждом запуске. Тогда мы сможем её идентифицировать. В противном случае - выходит, что мы занимаемся "черной магией". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 22:16 |
|
||
|
выделение памяти
|
|||
|---|---|---|---|
|
#18+
Подкорректирую код для первого случая: [source] class A { public: A() {}; ~A() {}; } class C; class B { public: C* cl; B(C*c) { cl = c; }; ~B() { if(cl->a) delete cl->a; }; void init_C_A() { cl->a = new A(); } } class C{ public: С() {}; ~С() {}; A *a; } C* cg = new C(); B* bg = new B(cg); cg->init_C_A(); // что-нибудь делаем с "bg->a" delete bg; delete cg; [/source] Ошибка никуда от меня не денется -) В общем, в чем суть - нет ли на этот счет чего-нибудь вроде опций компилятора или багов в билдах? PS. Первая ситуация не очень интересна. Более интересна инициализация массива в функции, в которую передан его адрес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2007, 23:17 |
|
||
|
выделение памяти
|
|||
|---|---|---|---|
|
#18+
Ну баенька с таким обращением с объектами в хипе, ничего удивительного нет. Раздолбал таблицу размещения malloc и удивляешься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2007, 17:27 |
|
||
|
выделение памяти
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2007, 15:22 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34499836&tid=2028938]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 569ms |

| 0 / 0 |
