|
|
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
Кто-нибудь сможет найти ошибку в ниже следующем коде??? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:04 |
|
||
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
да как в гарбузе семян 0) в кострукторе МуСlass(const char*) 1) в деструкторе надо вызывать delete [] ...; 2) в операторе присваивания memcpy??? Если хотел просто указатель скопировать то проще написать chrArr = src.chrArr; глубокую копию сделать - так уж копируй из одного буфера в другой 3) в операторе присваивания помнить о буфере и не забыть его реаллокироать 4) не хило было-бы и конструктор копирования поиметь ну вот на первый взляд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:22 |
|
||
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
батрак пишет: > > #include <tchar.h> > #include <stdio.h> > > class MyClass > { public: > char *chrArr; > MyClass(char *_chrArr) Не инициализируется переменная объекта "chrArr". > { if(_chrArr) > { chrArr = new char[strlen(_chrArr)+*1*]; > strcpy(chrArr, _chrArr); > } > } > virtual ~MyClass() > { if(chrArr) delete chrArr; > } operator = написан неправильно. Чтобы так работало , надо его выбростить вообще, чтобы он не был ни объявлен, ни определен, тогда компилятор сделает то, что ты хочешь. Но делать это самому так нельзя. Кроме того, надо перевыделять внутри буфер "chrArr", потому что таким образом владение буфером будет распространяться с присваиванием на объект-приемник, а это противоречит логике деструктора. > void operator=(const MyClass& src) > { memcpy(this, &src, sizeof(MyClass)); > } > }; > > int _tmain(int argc, _TCHAR* argv[]) > { > MyClass t1("MyText"); > MyClass t2(NULL); > t2=t1; > printf(t2.chrArr); > getchar(); > > return *0*; > } Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:23 |
|
||
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
MasterZiv Не инициализируется переменная объекта "chrArr". исправил. MasterZiv > void operator=(const MyClass& src) > { memcpy(this, &src, sizeof(MyClass)); > } Кроме того, надо перевыделять внутри буфер "chrArr", потому что таким образом владение буфером будет распространяться с присваиванием на объект-приемник, а это противоречит логике деструктора. Если не сложно, можно пояснить как перевыделить буффер, почему так нельзя или дать ссылку где можно изучить подобный вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:45 |
|
||
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
blindedда как в гарбузе семян 0) в кострукторе МуСlass(const char*) 1) в деструкторе надо вызывать delete [] ...; спасибо дельные замечания blinded 2) в операторе присваивания memcpy??? Если хотел просто указатель скопировать то проще написать chrArr = src.chrArr; глубокую копию сделать - так уж копируй из одного буфера в другой 3) в операторе присваивания помнить о буфере и не забыть его реаллокироать хотель глубокую копию, токо вот не знаю как из одного буфера в другой это сделать, буду признателен, если поможете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 16:48 |
|
||
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
батрак blindedда как в гарбузе семян 0) в кострукторе МуСlass(const char*) 1) в деструкторе надо вызывать delete [] ...; спасибо дельные замечания blinded 2) в операторе присваивания memcpy??? Если хотел просто указатель скопировать то проще написать chrArr = src.chrArr; глубокую копию сделать - так уж копируй из одного буфера в другой 3) в операторе присваивания помнить о буфере и не забыть его реаллокироать хотель глубокую копию, токо вот не знаю как из одного буфера в другой это сделать, буду признателен, если поможете Глубокую копию примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 17:07 |
|
||
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
sizeof(chrArr)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 17:15 |
|
||
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
maXmosizeof(chrArr)? Мда маху дал... заменить на strlen ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 17:54 |
|
||
|
где здесь ошибка ???
|
|||
|---|---|---|---|
|
#18+
батрак пишет: > Если не сложно, можно пояснить как перевыделить буффер, Удалить старый и выделить новый так же как и в конструкторе. почему так > нельзя Потому что объект состоит не только из мемберов, а и кое из чего другого и это другое нельзя копировать через memcpy. или дать ссылку где можно изучить подобный вопрос? Думаю в любом учебнике по С++. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 17:56 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2029106]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 496ms |

| 0 / 0 |
