K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>そういうわけで私流に書き直してみるテスト。 > >--- >#include <stdio.h> >#include <stdlib.h> >#include <string.h> > >typedef enum { > true = (1 == 1), > false = !true >} boolean; > >typedef struct{ > char cString[50]; > char **cpItem; >} typChangePrm; > > > >void freeMemory(typChangePrm *data) { > int i; > > printf("freeMemory - start\n"); > for(i = 0; data->cpItem[i]; i++) { > printf(" free(item) : pointer[%p]\n", data->cpItem[i]); > free(data->cpItem[i]); > } > printf(" free(item container) : pointer[%p]\n", data->cpItem); > free(data->cpItem); > data->cpItem = NULL; > printf("freeMemory - end\n"); > return; >} > > >boolean allocateMemory(typChangePrm *data, size_t itemSize) { > char **prevMemory; > size_t allocateSize; > int i; > > > printf("allocateMemory - start\n"); > if (data->cpItem != NULL) { > freeMemory(data); > } > > data->cpItem = calloc(itemSize + 1, sizeof(char *)); // +1して番兵をつける > printf(" allocate(item container) : pointer[%p]\n", data->cpItem); > > for(i = 0;i < itemSize; i++){ > data->cpItem[i] = calloc(64, sizeof(char)); > if (data->cpItem[i] == NULL) { > freeMemory(data); // 初期化に失敗したら壊す > return false; > } > printf(" allocate(item) : pointer[%p]\n", data->cpItem[i]); > } > printf("allocateMemory - end\n"); > > return true; >} > > >int main(void){ > typChangePrm data; > char str[]="hoge"; > size_t allocateSize; > size_t itemSize; > int i; > > > data.cpItem = NULL; > allocateMemory(&data, 10); > allocateMemory(&data, 20); > freeMemory(&data); > > return 0; >}
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!