Все работает нормально, динамически создавая массив , но ядро сбрасывается при попытке распечатать его назад. Удалось напечатать только последнюю строку, а затем ошибку сегментации.Выделение динамического 2D-массива
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
void init_array(void ***pt, int *ptlen) {
*pt=NULL;
*ptlen=0;
}
void trim_array(void ***pt, int *ptlen, int len) {
*pt=(void**)realloc(*pt, len*sizeof(void*));
*ptlen=len;
}
void write_array(void ***pt, int *ptlen, int pos, void *v) {
if (pos >= *ptlen)
trim_array(pt, ptlen, pos+1);
*pt[pos]=v;
}
void *read_array(void ***pt, int *ptlen, int pos) {
return(*pt[pos]);
}
void destroy_array(void ***pt, int *ptlen) {
trim_array(pt, ptlen, 0);
*pt=NULL;
}
int main(int argc, char *argv[]) {
void **t;
int tlen;
void ***pt = &t;
int *ptlen = &tlen;
char s[256],*p; int i;
init_array(pt, ptlen);
i = 0;
do {
printf("give name:\n");
scanf("%255s",s);
write_array(pt, ptlen, i, (void*)strdup(s));
i++;
} while (strcmp(s,"end"));
for (--i; i>=0; i--) {
p = (char*)read_array(pt, ptlen, i);
printf("%s\n",p);
free(p);
}
destroy_array(pt, ptlen);
return(0);
}
О, это неудачно. Может быть, мы сможем помочь. Пожалуйста, объясните, какую отладку вы уже сделали, чтобы мы не тратили время на то же самое. Какая строка претерпела изменения, значения индекса, подобные вещи. –
1. печать динамических записей сразу после вызова write_array для каждого показала, что все «работает нормально» 2. попытка распечатать весь массив (последний цикл) привела к ошибке сегментации - была напечатана только запись LAST. – user3605146
Можете ли вы по крайней мере, предоставить ввод, который вы используете? Зачем уходить с дороги, чтобы все угадали? –