回答編集履歴

4

追記

2016/11/03 06:48

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -175,3 +175,93 @@
175
175
  こんな風にfor分で回すと未確保のメモリにいってします気がします。
176
176
 
177
177
 
178
+
179
+
180
+
181
+ ###追記
182
+
183
+
184
+
185
+ メモリの静的確保、と動的確保、またポインタと配列あたりの理解が曖昧になっている気がします。
186
+
187
+
188
+
189
+ 静的確保と動的確保
190
+
191
+ ```c
192
+
193
+
194
+
195
+ // 静的確保
196
+
197
+ char buff[12];
198
+
199
+
200
+
201
+ ```
202
+
203
+
204
+
205
+ ```c
206
+
207
+
208
+
209
+ char *buff;
210
+
211
+
212
+
213
+ // 動的確保
214
+
215
+ buff = (char *)malloc(sizeof(char)*12);
216
+
217
+
218
+
219
+ ```
220
+
221
+ の二つは等価です。どちらか片方行えばOKです。
222
+
223
+
224
+
225
+ そして動的に確保したbuffも配列同様
226
+
227
+ buff[0],buff[1]などの使い方もできます。
228
+
229
+
230
+
231
+ しかし
232
+
233
+
234
+
235
+ ```c
236
+
237
+
238
+
239
+ char *buff;
240
+
241
+
242
+
243
+ buff = (char *)malloc(sizeof(char));// char1要素分を確保(char buff[1];と等価)
244
+
245
+
246
+
247
+ にたいして
248
+
249
+
250
+
251
+ buff[0] = 'a';
252
+
253
+ // ここまではOK
254
+
255
+ // ここから下はできません、メモリ破壊です
256
+
257
+ buff[1] = 'b';
258
+
259
+ buff[2] = 'c';
260
+
261
+ buff[3] = 'd';
262
+
263
+
264
+
265
+ ```
266
+
267
+

3

syuusei

2016/11/03 06:47

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -142,7 +142,7 @@
142
142
 
143
143
  多分私なら
144
144
 
145
- void addData(CUSTOMER_DATA *pacList)
145
+ void addData(CUSTOMER_DATA *acList)
146
146
 
147
147
  かな
148
148
 

2

追記

2016/11/03 06:28

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -105,3 +105,73 @@
105
105
 
106
106
 
107
107
  で10個分確保です
108
+
109
+
110
+
111
+
112
+
113
+ ### 質問文修正後への追記
114
+
115
+
116
+
117
+ 全文は読んでません、mallocが使われている周辺だけ読んでのコメントですが
118
+
119
+
120
+
121
+ ```
122
+
123
+ void addData(CUSTOMER_DATA acList[])
124
+
125
+
126
+
127
+ 〜略〜
128
+
129
+ if ((pnL = (CUSTOMER_DATA *)malloc(sizeof(CUSTOMER_DATA))) == NULL) {
130
+
131
+ 〜略〜
132
+
133
+
134
+
135
+
136
+
137
+ acList = pnL;
138
+
139
+ ```
140
+
141
+ void addData(CUSTOMER_DATA acList[])
142
+
143
+ 多分私なら
144
+
145
+ void addData(CUSTOMER_DATA *pacList)
146
+
147
+ かな
148
+
149
+
150
+
151
+ そして
152
+
153
+
154
+
155
+ if ((pnL = (CUSTOMER_DATA *)malloc(sizeof(CUSTOMER_DATA))) == NULL)
156
+
157
+ ではなく
158
+
159
+
160
+
161
+ if ((acList = (CUSTOMER_DATA *)malloc(sizeof(CUSTOMER_DATA) * 128)) == NULL) {
162
+
163
+
164
+
165
+ この部分で1要素分しか確保してないので
166
+
167
+
168
+
169
+ for (i = 0; i < 128; i++) { /*0の値以外の登録済み及び */
170
+
171
+ if (acList[i].lId != 0) {
172
+
173
+
174
+
175
+ こんな風にfor分で回すと未確保のメモリにいってします気がします。
176
+
177
+

1

追記

2016/11/03 06:24

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -59,3 +59,49 @@
59
59
 
60
60
 
61
61
  という問題ではないような気がします。
62
+
63
+
64
+
65
+ ##追記
66
+
67
+
68
+
69
+ 質問のタイトルに戻って動的なメモリの確保といことで
70
+
71
+
72
+
73
+ ```c
74
+
75
+ typedef struct seiseki {
76
+
77
+ int no; /* 学生番号 */
78
+
79
+ char name[128]; /* 氏名 */
80
+
81
+ int kokugo; /* 国語点数 */
82
+
83
+
84
+
85
+ }SEI,*lpSEI;
86
+
87
+
88
+
89
+ としておいて
90
+
91
+
92
+
93
+ lpSEI pns;
94
+
95
+
96
+
97
+ pns = (lpSEI)malloc(sizeof(SEI) * 10);
98
+
99
+
100
+
101
+
102
+
103
+ ```
104
+
105
+
106
+
107
+ で10個分確保です