Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
Всем привет! У меня есть инициализированный трехзвездночный массив (массив указателей на указатели): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. По нему есть 2 вопроса: 1) Какой размер массива? Вот эта строчка - objects[i] = new int* - выделяет 4 байта, или выделяет один байт (по идее один байт)? 2) Как правильно удалить такой массив? Вот так не получается, получаю свал на втором блоке for: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 01:06 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
int *** objects; objects = new int ** [3]; По нему есть 2 вопроса: 1) Какой размер массива? 3*sized(void*) Вот эта строчка - objects[i] = new int* - выделяет 4 байта, или выделяет один байт (по идее один байт)? 1*sizeof(void*) 2) Как правильно удалить такой массив? Вот так не получается, получаю свал на втором блоке for: А ты его неправильно выделяешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 01:45 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
Спасибо! А где именно не правильно? Если такое попробовать, то все правильно выводит - девять единиц: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 12:28 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, если двухмерный массив указателей создание: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. удаление: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 12:57 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
пропустил в начале Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 12:59 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
сорри, в начале Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 13:02 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
Ага, я понял, спс! Получается моя ошибка была вот здесь: Код: plaintext 1. Вместо массива указателей, выделял только один указатель. Здесь Vaddddddmemset (pField[i], 0, width * 4); // инициализация нулями как я понял сразу выделяется память под int на все элементы. И если элементов будет только 2 из 160 (20x80), то зря получается израсходовали кучу памяти. Может быть лучше не выделять сразу память, а выделять когда она нужна? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 13:52 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, ну указатель занимает не меньше памяти чем int ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 14:20 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
?MaximuS_G, ну указатель занимает не меньше памяти чем int А, ну тогда да. Я просто думал, что указатель занимает один байт, так как содержит в себе только адрес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 14:23 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
память оператор new выделяет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. memset памяти не выделяет. строка - Код: sql 1. эквивалентна Код: sql 1. 2. можно и так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. это только массив указателей создали, сами обьекты на которые указатели ссылаются еще нужно создать: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 14:46 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, А где именно не правильно? так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 15:10 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
Я понял, спасибо memset памяти не выделяет. Интересно, зачем ей тогда передавать размер памяти 3м параметром? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 15:11 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
MaximuS_G?MaximuS_G, ну указатель занимает не меньше памяти чем int А, ну тогда да. Я просто думал, что указатель занимает один байт, так как содержит в себе только адрес. Ага, а адрес всегда 8-мибитовый :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 15:12 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
MaximuS_GЯ понял, спасибо memset памяти не выделяет. Интересно, зачем ей тогда передавать размер памяти 3м параметром? Чтобы ей знать этот размер памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 15:12 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
MasterZivMaximuS_Gпропущено... А, ну тогда да. Я просто думал, что указатель занимает один байт, так как содержит в себе только адрес. Ага, а адрес всегда 8-мибитовый :-) The value stored in the pointer is an address to memory. If you're on a 32-bit system, that pointer into memory is going to be 32 bits (or four bytes) long. If you're on a 64-bit system, that pointer into memory is going to be 64 bits (or eight bytes) long. The size of the data that holds the location in memory has nothing to do with the size of the data represented at that location in memory. Теперь все ясно. MasterZivЧтобы ей знать этот размер памяти. То есть память не выделиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 15:51 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
MasterZivЧтобы ей знать этот размер памяти. Кажется здесь указана другая причина авторThe memset function takes three arguments. The first argument is a pointer (notice the void *) to whatever data type you are planning to set, the second argument is the specific value you are going to set your data with; there is however a catch in that memset will convert your integer value into an unsigned char when writing the data. The third argument is how many of those specific values are needed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:30 |
|
||
|
трехзвездночный массив
|
|||
|---|---|---|---|
|
#18+
И правда задает количество элементов, вот проверка: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 16:54 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=83&tid=2020438]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 292ms |
| total: | 422ms |

| 0 / 0 |
