質問するログイン新規登録

回答編集履歴

4

追記

2016/11/03 06:48

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -86,4 +86,48 @@
86
86
  if (acList[i].lId != 0) {
87
87
 
88
88
  こんな風にfor分で回すと未確保のメモリにいってします気がします。
89
+
90
+
89
-
91
+ ###追記
92
+
93
+ メモリの静的確保、と動的確保、またポインタと配列あたりの理解が曖昧になっている気がします。
94
+
95
+ 静的確保と動的確保
96
+ ```c
97
+
98
+ // 静的確保
99
+ char buff[12];
100
+
101
+ ```
102
+
103
+ ```c
104
+
105
+ char *buff;
106
+
107
+ // 動的確保
108
+ buff = (char *)malloc(sizeof(char)*12);
109
+
110
+ ```
111
+ の二つは等価です。どちらか片方行えばOKです。
112
+
113
+ そして動的に確保したbuffも配列同様
114
+ buff[0],buff[1]などの使い方もできます。
115
+
116
+ しかし
117
+
118
+ ```c
119
+
120
+ char *buff;
121
+
122
+ buff = (char *)malloc(sizeof(char));// char1要素分を確保(char buff[1];と等価)
123
+
124
+ にたいして
125
+
126
+ buff[0] = 'a';
127
+ // ここまではOK
128
+ // ここから下はできません、メモリ破壊です
129
+ buff[1] = 'b';
130
+ buff[2] = 'c';
131
+ buff[3] = 'd';
132
+
133
+ ```

3

syuusei

2016/11/03 06:47

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -70,7 +70,7 @@
70
70
  ```
71
71
  void addData(CUSTOMER_DATA acList[])
72
72
  多分私なら
73
- void addData(CUSTOMER_DATA *pacList)
73
+ void addData(CUSTOMER_DATA *acList)
74
74
  かな
75
75
 
76
76
  そして

2

追記

2016/11/03 06:28

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -51,4 +51,39 @@
51
51
 
52
52
  ```
53
53
 
54
- で10個分確保です
54
+ で10個分確保です
55
+
56
+
57
+ ### 質問文修正後への追記
58
+
59
+ 全文は読んでません、mallocが使われている周辺だけ読んでのコメントですが
60
+
61
+ ```
62
+ void addData(CUSTOMER_DATA acList[])
63
+
64
+ 〜略〜
65
+ if ((pnL = (CUSTOMER_DATA *)malloc(sizeof(CUSTOMER_DATA))) == NULL) {
66
+ 〜略〜
67
+
68
+
69
+ acList = pnL;
70
+ ```
71
+ void addData(CUSTOMER_DATA acList[])
72
+ 多分私なら
73
+ void addData(CUSTOMER_DATA *pacList)
74
+ かな
75
+
76
+ そして
77
+
78
+ if ((pnL = (CUSTOMER_DATA *)malloc(sizeof(CUSTOMER_DATA))) == NULL)
79
+ ではなく
80
+
81
+ if ((acList = (CUSTOMER_DATA *)malloc(sizeof(CUSTOMER_DATA) * 128)) == NULL) {
82
+
83
+ この部分で1要素分しか確保してないので
84
+
85
+ for (i = 0; i < 128; i++) { /*0の値以外の登録済み及び */
86
+ if (acList[i].lId != 0) {
87
+
88
+ こんな風にfor分で回すと未確保のメモリにいってします気がします。
89
+

1

追記

2016/11/03 06:24

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -28,4 +28,27 @@
28
28
  > 配列の中身(int型)が0で初期化されないので
29
29
  問題が発生する。
30
30
 
31
- という問題ではないような気がします。
31
+ という問題ではないような気がします。
32
+
33
+ ##追記
34
+
35
+ 質問のタイトルに戻って動的なメモリの確保といことで
36
+
37
+ ```c
38
+ typedef struct seiseki {
39
+ int no; /* 学生番号 */
40
+ char name[128]; /* 氏名 */
41
+ int kokugo; /* 国語点数 */
42
+
43
+ }SEI,*lpSEI;
44
+
45
+ としておいて
46
+
47
+ lpSEI pns;
48
+
49
+ pns = (lpSEI)malloc(sizeof(SEI) * 10);
50
+
51
+
52
+ ```
53
+
54
+ で10個分確保です