History 型の構造体をパラメーターとして受け取る関数を作成しました。構造体には char 2d 配列が含まれており、そのサイズは動的に割り当てられます。
だからここに関数があります:
void appendLine(Historique** hist, const char* str){
int size, i, sizestr;
size=(*hist)->size;
sizestr=strlen(str);
History* tmp;
tmp=NULL;
tmp=(struct History*)malloc(sizeof(hist));
copyHist(&tmp, *hist);
freeHist(*hist);
*hist=NULL;
*hist=(struct History*)malloc(sizeof(History));
(*hist)->size=tmp->size;
if(((*hist)->line=(char**)malloc(sizeof(char)*size+sizeof(char)))==NULL){
printf("ERROR !");
exit(EXIT_FAILURE);
}
if((((*hist)->ligne)[taille]=(char*)malloc(sizeof(char)*strlen(str)+sizeof(char)))==NULL){
printf("ERROR !");
exit(EXIT_FAILURE);
}
for(i=0; i<taille; i++){
(*hist)->ligne[i]=(char*)malloc(sizeof(char)*strlen(tmp->line[i])+sizeof(char));
memcpy((*hist)->ligne[i], (tmp->line)[i], sizeof(char)*strlen(tmp->line[i]));
(*hist)->line[i][strlen(tmp->line[i])]='\0';
}
for(i=0;i<sizestr;i++){
(*hist)->line[size][i]=str[i];
}
(*hist)->line[size][strlen(str)]='\0';
(*hist)->size+=1;
tmp=NULL;
}
void copyHist(History** dest, const History* src) {
int i,j;
(*dest)->line=NULL;
(*dest)->line=(char **)malloc(sizeof(char)*src->size);
for(i=0; i<src->size; i++){
if(((*dest)->line[i]=malloc(sizeof(char)*strlen(src- >line[i])+sizeof(char)))==NULL){
printf("ERROR!");
exit(EXIT_FAILURE);
}
for(j=0;j<strlen(src->line[i]);j++){
(*dest)->line[i][j]=(src->line)[i][j];
}
(*dest)->line[i][j]='\0';
}
memmove(&((*dest)->size), &(src->size), sizeof(int));
}
void freeHist(History* arg){
int i;
for(i=0; i<arg->size; i++){
free(arg->line[i]);
arg->line[i]=NULL;
}
free(arg);
arg=NULL;
}
したがって、いくつかの行を次々に追加すると、行にindex 0
正しいものが表示されないことを除いて、すべて正常に動作するようです。
ご心配ありがとうございます