fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void dump(char **array, size_t len) {
  6. for(size_t i=0; i<len; i++) printf("%03d : %s\n",i,*(array+i));
  7. }
  8.  
  9. void p2p() {
  10. const char *sample_str = "abc";
  11. const size_t initial_max = 50; // изначально предполагаем, что этого хватит
  12. const size_t real_life_max = 350; // жизнь показала, что нужно вот столько
  13. size_t allocated = initial_max;
  14. char **my_array = (char**)calloc(allocated, sizeof(char*)); // выделяем предполагаемый минимум
  15. if (my_array != NULL) {
  16. // программа начинает работать в жесткой реальности
  17. for (size_t i = 0; i < real_life_max; i++) {
  18. if (i >= allocated) {
  19. // принимаем решение увеличивать выделенную память
  20. allocated = real_life_max;
  21. if ((my_array = realloc(my_array, allocated * sizeof(char*))) == NULL) {
  22. printf("realloc error!\n");
  23. exit(-1);
  24. }
  25. }
  26. my_array[i] = (char*)calloc(strlen(sample_str)+1,sizeof(char));
  27. if (my_array[i] == NULL) {
  28. printf("calloc-2 error!\n");
  29. exit(-1);
  30. }
  31. memmove(my_array[i], sample_str, strlen(sample_str)*sizeof(char));
  32. }
  33. } else {
  34. printf("calloc-1 error!\n");
  35. exit(-1);
  36. }
  37. // печатаем всю эту шляпу
  38. dump(my_array,allocated);
  39. // free
  40. for (size_t i = 0; i < real_life_max; i++) free(*(my_array+i));
  41. free(my_array);
  42. }
  43.  
  44. int main(void) {
  45. p2p();
  46. return 0;
  47. }
  48.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
000 : abc
001 : abc
002 : abc
003 : abc
004 : abc
005 : abc
006 : abc
007 : abc
008 : abc
009 : abc
010 : abc
011 : abc
012 : abc
013 : abc
014 : abc
015 : abc
016 : abc
017 : abc
018 : abc
019 : abc
020 : abc
021 : abc
022 : abc
023 : abc
024 : abc
025 : abc
026 : abc
027 : abc
028 : abc
029 : abc
030 : abc
031 : abc
032 : abc
033 : abc
034 : abc
035 : abc
036 : abc
037 : abc
038 : abc
039 : abc
040 : abc
041 : abc
042 : abc
043 : abc
044 : abc
045 : abc
046 : abc
047 : abc
048 : abc
049 : abc
050 : abc
051 : abc
052 : abc
053 : abc
054 : abc
055 : abc
056 : abc
057 : abc
058 : abc
059 : abc
060 : abc
061 : abc
062 : abc
063 : abc
064 : abc
065 : abc
066 : abc
067 : abc
068 : abc
069 : abc
070 : abc
071 : abc
072 : abc
073 : abc
074 : abc
075 : abc
076 : abc
077 : abc
078 : abc
079 : abc
080 : abc
081 : abc
082 : abc
083 : abc
084 : abc
085 : abc
086 : abc
087 : abc
088 : abc
089 : abc
090 : abc
091 : abc
092 : abc
093 : abc
094 : abc
095 : abc
096 : abc
097 : abc
098 : abc
099 : abc
100 : abc
101 : abc
102 : abc
103 : abc
104 : abc
105 : abc
106 : abc
107 : abc
108 : abc
109 : abc
110 : abc
111 : abc
112 : abc
113 : abc
114 : abc
115 : abc
116 : abc
117 : abc
118 : abc
119 : abc
120 : abc
121 : abc
122 : abc
123 : abc
124 : abc
125 : abc
126 : abc
127 : abc
128 : abc
129 : abc
130 : abc
131 : abc
132 : abc
133 : abc
134 : abc
135 : abc
136 : abc
137 : abc
138 : abc
139 : abc
140 : abc
141 : abc
142 : abc
143 : abc
144 : abc
145 : abc
146 : abc
147 : abc
148 : abc
149 : abc
150 : abc
151 : abc
152 : abc
153 : abc
154 : abc
155 : abc
156 : abc
157 : abc
158 : abc
159 : abc
160 : abc
161 : abc
162 : abc
163 : abc
164 : abc
165 : abc
166 : abc
167 : abc
168 : abc
169 : abc
170 : abc
171 : abc
172 : abc
173 : abc
174 : abc
175 : abc
176 : abc
177 : abc
178 : abc
179 : abc
180 : abc
181 : abc
182 : abc
183 : abc
184 : abc
185 : abc
186 : abc
187 : abc
188 : abc
189 : abc
190 : abc
191 : abc
192 : abc
193 : abc
194 : abc
195 : abc
196 : abc
197 : abc
198 : abc
199 : abc
200 : abc
201 : abc
202 : abc
203 : abc
204 : abc
205 : abc
206 : abc
207 : abc
208 : abc
209 : abc
210 : abc
211 : abc
212 : abc
213 : abc
214 : abc
215 : abc
216 : abc
217 : abc
218 : abc
219 : abc
220 : abc
221 : abc
222 : abc
223 : abc
224 : abc
225 : abc
226 : abc
227 : abc
228 : abc
229 : abc
230 : abc
231 : abc
232 : abc
233 : abc
234 : abc
235 : abc
236 : abc
237 : abc
238 : abc
239 : abc
240 : abc
241 : abc
242 : abc
243 : abc
244 : abc
245 : abc
246 : abc
247 : abc
248 : abc
249 : abc
250 : abc
251 : abc
252 : abc
253 : abc
254 : abc
255 : abc
256 : abc
257 : abc
258 : abc
259 : abc
260 : abc
261 : abc
262 : abc
263 : abc
264 : abc
265 : abc
266 : abc
267 : abc
268 : abc
269 : abc
270 : abc
271 : abc
272 : abc
273 : abc
274 : abc
275 : abc
276 : abc
277 : abc
278 : abc
279 : abc
280 : abc
281 : abc
282 : abc
283 : abc
284 : abc
285 : abc
286 : abc
287 : abc
288 : abc
289 : abc
290 : abc
291 : abc
292 : abc
293 : abc
294 : abc
295 : abc
296 : abc
297 : abc
298 : abc
299 : abc
300 : abc
301 : abc
302 : abc
303 : abc
304 : abc
305 : abc
306 : abc
307 : abc
308 : abc
309 : abc
310 : abc
311 : abc
312 : abc
313 : abc
314 : abc
315 : abc
316 : abc
317 : abc
318 : abc
319 : abc
320 : abc
321 : abc
322 : abc
323 : abc
324 : abc
325 : abc
326 : abc
327 : abc
328 : abc
329 : abc
330 : abc
331 : abc
332 : abc
333 : abc
334 : abc
335 : abc
336 : abc
337 : abc
338 : abc
339 : abc
340 : abc
341 : abc
342 : abc
343 : abc
344 : abc
345 : abc
346 : abc
347 : abc
348 : abc
349 : abc