Я пытаюсь реализовать структуру стека в C, для хранения массивов char.Реализация стопки «строк» в C
У меня есть следующий код:
typedef struct {
size_t size;
char **data;
} loods1;
loods1 *init(void) {
loods1 *loods = malloc(sizeof(loods1));
loods->data = malloc(sizeof(char *) * STACK_MAX);
for (int i = 0; i < STACK_MAX; i++) {
*(loods->data + i) = malloc(LABEL_LENGTH_MAX * sizeof(char));
}
loods->size = 0;
if (loods == NULL) {
perror("malloc failed\n");
return NULL;
}
return loods;
}
int empty(loods1 *loods) {
return (loods->size == 0);
}
void push(loods1 *loods, char *name) {
if (loods->size == STACK_MAX) {
perror("Stack is full\n");
exit(0);
}
else {
*((loods->data) + loods->size++) = name;
}
}
char *pop(loods1 *loods) {
if (loods->size == 0) {
printf("size == 0\n");
return NULL;
}
else {
printf("%s \n", *(loods->data + 1));
return *(loods->data + (--loods->size));
}
}
int delete(loods1 *loods) {
for (int i = 0; i < STACK_MAX; i++) {
free(*(loods->data + i));
}
free(loods->data);
free(loods);
}
Есть 2 проблемы: Во-первых, каждый раз, когда я добавить новый элемент в стек, он переписывает все существующие элементы (если «3» и «11» добавляются, и я хочу добавить '15', новый стек будет выглядеть как '15', '15', '15'). И когда я хочу выложить стек, всплывающее значение пуст. Не пустой, но пустая строка или что-то еще?
Я понятия не имею, что я делаю неправильно, но, кажется, что-то случилось, очевидно.
Сэого
Вы не показываете, где вы вызываете этот код, но я предполагаю, что у вас есть «имя» в статическом буфере или что-то еще? Если вы хотите, чтобы фактические строки вошли в стек, вам нужно выделить память для каждого, прежде чем вы ее разместите. Кроме того, вы можете сделать '* ((loods-> data) + loods-> size ++) = strdup (name)'. Вам просто нужно освободить их по отдельности позже. –