@norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
|
16.11.2010, 12:05
|
|

Сообщение от accept
знаешь, там еще реаллочить нужно строки (те, которые были), уменьшая до длины три
а новые строки просто выделить с длиной три, и всего две штуки
кажись сделано перераспределение и обработка всех последствий
C | 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
| #include <stdio.h>
#include <stdlib.h>
void freeAfter(int *ptr, int k);
int main(void)
{
const int m = 3, n = 5;
int **vect;
int **a;
// Allocating memory for m * n
if (!(vect = (int** ) malloc(m * sizeof(int*))))
exit(1);
for (int i = 0; i < m; ++i)
if(!(vect[i] = (int *) malloc(n * sizeof(int))))
{
free((int* )vect);
exit(1);
}
// Reallocating memory for n * m
if (!(a = (int** ) realloc((int* )vect, n * sizeof(int*))))
{
// Delete Allocated memory
freeAfter((int* )vect, m);
free((int* )vect);
exit(1);
}
vect = a;
for (int i = 0; i < m; ++i)
if(!(vect[i] = (int *) realloc(vect[i], m * sizeof(int))))
{
freeAfter((int* )vect, m);
free((int* )vect);
exit(1);
}
for(int i = m; i < n; ++i)
if(!(vect[i] = (int *) malloc(m * sizeof(int))))
{
freeAfter((int* )vect, m);
free((int* )vect);
exit(1);
}
// Delete Allocated memory
for (int i = 0; i < n; ++i)
free(vect[i]);
free((int* )vect);
printf("\n");
system("PAUSE");
return 0;
}
void freeAfter(int *ptr, int k)
{
for (int i = 0; i < k; ++i)
free((void* )ptr[i]);
} |
|
2
|