[541] Re:reallocについて
投稿者:れぷ
2007/02/20 02:13:25
そういうわけで私流に書き直してみるテスト。
---
#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;
}