|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T, прочитал тему "Правила и рекомендации к оформлению сообщений на форуме С++" я довольно глупые вопросы задаю для уровня этого форума. Поэтому готов немного задонатить за решение этого вопроса. Надо сделать этот массив Показать как обращаться(читать-писать) к строке по адрессу типа (stroka[x][i]) С вашим уровнем знаний, уверен, для вас это 5 минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 17:34 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Я против донаторства в данном под-форуме. Но я могу перенести этот топик в Работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 17:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Я против донаторства в данном под-форуме. Но я могу перенести этот топик в Работу. не, переносить не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Тут ты просто устроил утечку памяти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Если Код: plaintext 1.
объявить до for Код: 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.
то ошибка: str7.c:18:9: error: conflicting types for ‘stroka’ char** stroka = (char**)malloc(M*sizeof(char*)); ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:12 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Дружище. По обучению. Мой совет. Попробуй возьми бумажку в клеточку и каранадаш. И нарисуй память. Массивы указателей и твои строки. Указатель может выглядеть в памяти как целое число длиной 8 байтов (64 бит). Возможен вариант что и 32 бит для старых машин или мелких устройств. Особый указатель NULL - это ноль приведенный к типу указателя может быть терминатором или волшебной константой которая говорит например что память для этого указателя еще не аллоцирована или уже удалена. Символы соотв могут быть как 1 байт так и 2 в зависимости от разных настроек окружения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:38 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Dima T, прочитал тему "Правила и рекомендации к оформлению сообщений на форуме С++" я довольно глупые вопросы задаю для уровня этого форума. Поэтому готов немного задонатить за решение этого вопроса. Надо сделать этот массив Показать как обращаться(читать-писать) к строке по адрессу типа (stroka[x][i]) С вашим уровнем знаний, уверен, для вас это 5 минут. С моим уровнем дохода мне донаты не интересны. Мне интересно направить в нужную сторону того кто действительно хочеть понять. Тут готов помогать бесплатно, но не готовыми решениями. Если надо только готовое решение, то в форуме работа за донат сделают студенты чуть умнее тебя. Только им сразу всю задачу описывай. Ты влез в очень сложную тему, она не только для новичка сложная, судя по последним постам мозг уже кипит, начался подбор места куда воткнуть строчку лишь бы скомпилировалось, это неправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:59 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Код: plaintext 1. 2. 3.
Ты два раза объявил переменную stroka, такое ни один компилятор не пропустит. PS Эту подсказку не учел 22426362 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Дружище. По обучению. Мой совет. Попробуй возьми бумажку в клеточку и каранадаш. И нарисуй память. Массивы указателей и твои строки. Указатель может выглядеть в памяти как целое число длиной 8 байтов (64 бит). Возможен вариант что и 32 бит для старых машин или мелких устройств. Особый указатель NULL - это ноль приведенный к типу указателя может быть терминатором или волшебной константой которая говорит например что память для этого указателя еще не аллоцирована или уже удалена. Символы соотв могут быть как 1 байт так и 2 в зависимости от разных настроек окружения. Пока нарисовал строки. "A" - это 1 символ. "А1" - это два символа, объединенных в одномерный массив {"А1", "А2", "А3"} - это уже двумерный массив. {"А1", "А2", "А3"} {"B1", "B2", "B3"} - это трехмерный массив {"C1", "C2", "C3"} Сейчас с указателями попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Код: plaintext 1. 2. 3.
Ты два раза объявил переменную stroka, такое ни один компилятор не пропустит. PS Эту подсказку не учел 22426362 А как получается сделать, чтобы за пределами if не терялся указатель? Возможно ее там объявлять не надо вообще, ведь получается в if она второй раз объявляется и действует только там. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:06 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T я подбор места куда воткнуть строчку лишь бы скомпилировалось, это неправильно. Полностью согласен, пытаюсь разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:07 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Пока нарисовал строки. Теперь пронумеруй клеточки, все подряд, пустые, непустые: 1,2,3,...,100500. Так вот указатель на строку это номер клеточки в которой начинается строка. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:08 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
УткъПоказать как обращаться(читать-писать) к строке по адрессу типа (stroka[x][i]) Никак. С любым уровнем знания это невозможно в Си. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:11 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Пока нарисовал строки. Теперь пронумеруй клеточки, все подряд, пустые, непустые: 1,2,3,...,100500. Так вот указатель на строку это номер клеточки в которой начинается строка. Сделал это мысленно, до 3-й мерности. На третей надо еще пару листов, но смысл уже проясняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:11 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ А как получается сделать, чтобы за пределами if не терялся указатель? Нет у тебя if, есть for :) Как начать я уже показал 22426351 , как продолжить намекнул 22426362 , еще чуть-чуть и ответ получится. Думай, сегодня я ушел, завтра продолжим. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:14 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Хорошо, спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:15 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75.
Освобождение памяти сделал аналогично выделению, но в обратном порядке. Посмотрите пожалуйста, это рабочий вариант или опять я куда-то не туда зашел? Еще остался один вопрос, ниже его напишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:43 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Еще остался один вопрос, ниже его напишу. А вопрос вот какой. Если делаю простое присваивание: Код: plaintext 1.
Все проходит нормально. А если пытаюсь собрать ту же строку из двух, то ошибка: Код: plaintext 1.
Segmentation fault Максимальная длинна строки задана в 100-1 символ (define N 100) и непонятно почему тут ошибка. Складывать строки при заполнении массива надо, т.к. он будет заполняться из переменных. Подскажите пожалуйста как правильно в массив вставить запись, сложив строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:55 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Уткъ Еще остался один вопрос, ниже его напишу. А вопрос вот какой. Если делаю простое присваивание: Код: plaintext 1.
Все проходит нормально. А если пытаюсь собрать ту же строку из двух, то ошибка: Код: plaintext 1.
Segmentation fault Максимальная длинна строки задана в 100-1 символ (define N 100) и непонятно почему тут ошибка. Складывать строки при заполнении массива надо, т.к. он будет заполняться из переменных. Подскажите пожалуйста как правильно в массив вставить запись, сложив строки? Вот так сработало, за два шага: Код: plaintext 1. 2.
strcat не может просто две строки сложить, надо чтобы первая уже была в памяти получается ) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 20:07 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ А если пытаюсь собрать ту же строку из двух, то ошибка: Код: plaintext 1.
Segmentation fault Тебе в тестеры надо, ты умудрился откомпилировать то что не должно компилироваться. Не пользуйся тем компилятором. "stro" это const char*, т.е. строка только для чтения, физически она распологается в сегменте памяти помеченной только для чтения, а strcat туда писать пытается, поэтому Segmentation fault Писать можно только в stroka[0][0], поэтому делай так: Код: plaintext 1. 2. 3.
Или так как сделал тут 22426543 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ strcat не может просто две строки сложить, надо чтобы первая уже была в памяти получается ) Не фантазируй. Он не складывает, а дописывает вторую в конец первой. Читай документацию . ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:22 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Тебе в тестеры надо, ты умудрился откомпилировать то что не должно компилироваться. Не пользуйся тем компилятором. Вот такой компилятор: gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) Dima T "stro" это const char*, т.е. строка только для чтения, физически она распологается в сегменте памяти помеченной только для чтения, а strcat туда писать пытается, поэтому Segmentation fault Я интуитивно догадывался что что-то не так с "stro", когда она не в переменной, а вы смогли все четко объяснить. Спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75.
Освобождение памяти сделал аналогично выделению, но в обратном порядке. Посмотрите пожалуйста, это рабочий вариант или опять я куда-то не туда зашел? Еще остался один вопрос, ниже его напишу. Почти верно, косяк тут Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Есть прогресс. Скомпилилировалось и даже пару раз отработало :-) Вот что получилось: Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75.
Освобождение памяти сделал аналогично выделению, но в обратном порядке. Посмотрите пожалуйста, это рабочий вариант или опять я куда-то не туда зашел? Еще остался один вопрос, ниже его напишу. Почти верно, косяк тут Код: plaintext 1.
Так должно быть? Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:39 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ, дружище. Судя по профилю ты - Postgres-щик. Тебе действительно очень надо кодить на сях? Я почему спрашиваю. Для админ- или девопс- задачек можно задействовать целый спектр языков которые и проще и быстрее в освоении. Ruby, Python, e.t.c. И драйвера и клиенты PG для них давно созданы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 01:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Уткъ, дружище. Судя по профилю ты - Postgres-щик. Тебе действительно очень надо кодить на сях? Я почему спрашиваю. Для админ- или девопс- задачек можно задействовать целый спектр языков которые и проще и быстрее в освоении. Ruby, Python, e.t.c. Нужно сделать высоконагруженное приложение с парралельными запросами и копированием данных туда-сюда на огромное количество серверов (1000+) Поэтому выбор пал на Си (+libpq), как родной язык для PostgreSQL. В принципе, это все работало на psql+bash, но логика стала на столько сложна, что это пора выносить на уровень приложения. У Си оказались свои особенности, с которыми потихоньку разбираюсь. Хорошо этот раздел форума оказался живой и тут есть реальная помощь :-) Ну и сами понимаете, Си - это что-то реальное, основательное. Вот, к примеру, было непонятно кое-что с копированием данных - открыл исходник PostgreSQL и взял код прям оттуда, немного адаптировав под себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 02:03 |
|
|
start [/forum/topic.php?fid=57&msg=40129749&tid=2017122]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 121ms |
0 / 0 |