回答編集履歴

1

m

2018/12/07 16:18

投稿

yumetodo
yumetodo

スコア5850

test CHANGED
@@ -3,6 +3,18 @@
3
3
  #include <stdlib.h>
4
4
 
5
5
  #include <stdbool.h>
6
+
7
+ typedef struct MISSILE {
8
+
9
+ double x;
10
+
11
+ double y;
12
+
13
+ double angle;
14
+
15
+ double speed;
16
+
17
+ }
6
18
 
7
19
  typedef struct tag_missile_vec {
8
20
 
@@ -16,11 +28,13 @@
16
28
 
17
29
 
18
30
 
19
- missile_vec* missile_vec_new(size_t size, double x, double y, double angle, double speed) {
31
+ missile_vec* missile_vec_new(size_t size, size_t capacity, double x, double y, double angle, double speed) {
32
+
33
+ if(capacity < size) return NULL;
20
34
 
21
35
  missile_vec* missile;
22
36
 
23
- if(NULL = (missile->data = malloc(size * sizeof(MISSILE))) return NULL;
37
+ if(NULL = (missile->data = malloc(capacity * sizeof(MISSILE))) return NULL;
24
38
 
25
39
  for(size_t i = 0; i < size; ++i){
26
40
 
@@ -38,7 +52,33 @@
38
52
 
39
53
  missile->size = size;
40
54
 
55
+ missile->capacity = capacity;
56
+
41
57
  return missile;
58
+
59
+ }
60
+
61
+ bool missile_vec_push(missile_vec* missile, const MISSILE* data)
62
+
63
+ {
64
+
65
+ if(NULL == missile || NULL == data) return false;
66
+
67
+ if(capacity < size + 1){
68
+
69
+ const size_t new_capacity = ((SIZE_MAX / 2) < missile->capacity) ? SIZE_MAX : missile->capacity * 2;
70
+
71
+ if(NULL == (missile->data = realloc(missile->data, capacity * sizeof(MISSILE)))) return false;
72
+
73
+ missile->capacity = new_capacity;
74
+
75
+ }
76
+
77
+ missile->data[missile->size] = *data;
78
+
79
+ ++missile->size;
80
+
81
+ return true;
42
82
 
43
83
  }
44
84
 
@@ -56,13 +96,15 @@
56
96
 
57
97
  {
58
98
 
99
+ if(NULL == missile) return;
100
+
59
101
  //do something
60
102
 
61
103
  }
62
104
 
63
105
  int main(){
64
106
 
65
- missile_vec* missile = missile_vec_new(10, 0, 0, 0, 0);
107
+ missile_vec* missile = missile_vec_new(10, 20, 0, 0, 0, 0);
66
108
 
67
109
  if(NULL == missile) return 1;
68
110