|
В чем разница между std::unique_ptr<char> и std::unique_ptr<char[]> ?
|
|||
---|---|---|---|
#18+
Сабж ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 16:01 |
|
В чем разница между std::unique_ptr<char> и std::unique_ptr<char[]> ?
|
|||
---|---|---|---|
#18+
первый указатель на char, второй - указатель на указатель на char https://ru.cppreference.com/w/cpp/memory/unique_ptr ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 16:12 |
|
В чем разница между std::unique_ptr<char> и std::unique_ptr<char[]> ?
|
|||
---|---|---|---|
#18+
semen.s.semenСабж В вызываемом delete. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 16:58 |
|
В чем разница между std::unique_ptr<char> и std::unique_ptr<char[]> ?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Почему такой код приводит к зависанию и бесконечной печати Destructor ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 18:25 |
|
В чем разница между std::unique_ptr<char> и std::unique_ptr<char[]> ?
|
|||
---|---|---|---|
#18+
semen.s.semen, В std::unique_ptr<t[]> надо передавать массив, а не одиночный объект: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 19:06 |
|
В чем разница между std::unique_ptr<char> и std::unique_ptr<char[]> ?
|
|||
---|---|---|---|
#18+
Anatoly Moskovskysemen.s.semen, В std::unique_ptr<t[]> надо передавать массив, а не одиночный объект: Код: plaintext 1.
Это понятно Вопрос - почему мой код зависает ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 19:15 |
|
В чем разница между std::unique_ptr<char> и std::unique_ptr<char[]> ?
|
|||
---|---|---|---|
#18+
Чтобы ответить на данный вопрос надо знать как устроен менеджер памяти в отношении delete[]. Осмелюсь предположить, что для простого new в менеджере памяти есть некая переменная хранящая только указатель на освобождаемый блок памяти, а для new[] есть еще и число - кол-во освобождаемых объектов. Поскольку авторIf expression is not a null pointer, the delete expression invokes the destructor (if any) for the object that's being destroyed, or for every element of the array being destroyed (proceeding from the last element to the first element of the array). то при освобождении массива память освобождается столько раз сколько было указано в угловых скобках new. Но поскольку здесь идет обращение к неинициализированному счетчику объектов (назовем это так) , то его значение может быть каким угодно, как правило довольно большим, поэтому delete[] вызывает деструкторы "несуществующих" объектов t и хреначит пока не переберет их все до последнего. То есть рано или поздно произойдет падение при обращении к недопустимому адресу, либо простой выход из цикла, либо бесконечная рекурсия из-за хаоса возникшего в менеджере памяти. UB чистой воды Только одно не понятно - нахера так делать? Жизнь скучна без приключений ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 21:05 |
|
В чем разница между std::unique_ptr<char> и std::unique_ptr<char[]> ?
|
|||
---|---|---|---|
#18+
semen.s.semenВопрос - почему мой код зависает ? cppreferenceFor the second (array) form, expression must be a null pointer value or a pointer value previously obtained by an array form of new-expression. If expression is anything else, including if it's a pointer obtained by the non-array form of new-expression, the behavior is undefined . Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 21:13 |
|
|
start [/forum/topic.php?fid=57&msg=39741310&tid=2017711]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 166ms |
0 / 0 |