|
|
|
Передача по ссылке
|
|||
|---|---|---|---|
|
#18+
Вот такой вопросик... Есть функция char** getdata(int* lines) lines - кол-во строк в массиве массив динамический и довольно большой (в общей сложности около 1.5kb) предположим кол-во строк 150, делаю просто *lines = arsize // (150) вывожу на экран все ок, теперь char** out = NULL; int lines = 0; out = getdata(&lines); массив возвращается правильно но вот вместо line = 150 я получаю чет из серии 875575856... (ну и полный завал соответственно). При меньших размерах возвращаемого массива все ок... Память под массив выделяется до присваивания lines... Отсюда вопросы - возможно ли перекрытие? (массив налезает на lines) - может ли размер возвращаемого значения влиять, на другие переменные? если да то как этого избежать? (варианты сделать массив поменьше или разбить не подходят) - что вообще делать то? Вся задача усложняется тем что все пишется на ANSI C под FreeBSD ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 17:44 |
|
||
|
Передача по ссылке
|
|||
|---|---|---|---|
|
#18+
а исходник? выдели подозрительное место в отдельную программу и проверь, вполне возможно что проблема не там где ты ее ищеш ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 18:08 |
|
||
|
Передача по ссылке
|
|||
|---|---|---|---|
|
#18+
Так вот не понятно что подозревать при 300 байт работает нормально, при 1.5 Кб нет :(. Должна ведь быть причина? Почему значение теряется (или почему указатель начинает указывать на другую облать)? _________________________________________________ Легче написать не правильную программу чем понять правильную (С) Alan Perlis ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 18:27 |
|
||
|
Передача по ссылке
|
|||
|---|---|---|---|
|
#18+
Точно Точно ! Исходик покаж , а то я честно говоря не телепат . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2003, 19:05 |
|
||
|
Передача по ссылке
|
|||
|---|---|---|---|
|
#18+
Спасибо за заинтересованость... как только доберусь до работы (в Среду) сразу же покажу исходник... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 00:11 |
|
||
|
Передача по ссылке
|
|||
|---|---|---|---|
|
#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. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2003, 16:28 |
|
||
|
Передача по ссылке
|
|||
|---|---|---|---|
|
#18+
1. Проверь внимательно чтобы размеры массива былы на 1 больше реального (для завершаюшего нуля). Код: plaintext 1. 2. не правильно, т.к. если прийдет BUFFSZ байт или больше, то rz станет = BUFFSZ, а buff[rz] = '\0'; - выйдет за границу массива. Еще видел пару подозрительных мест. 2. Если есть отладчик, пройди всю функцию с просмитром значений size и *size Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2003, 18:26 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=466&tid=2035731]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 204ms |
| total: | 319ms |

| 0 / 0 |
