Я работаю над стеком ADT и пытаюсь выполнить команду stack_pu sh (помещая элемент поверх стека). Обратите внимание, что вместо стека с целыми числами я работаю со строками. Вот что у меня есть:
char *strdup(const char *s) {
char *new = malloc((strlen(s) + 1) * sizeof(char));
strcpy(new, s);
return new;
}
void stack_push(const char *str, struct stack *s) {
assert(s);
assert(str);
char *copied_str = strdup(str);
if (s->len == s->maxlen) {
s->maxlen *= 2;
s->data = realloc(s->data, (sizeof(s->data) +
((strlen(str) + 1) * sizeof(char))));
}
strcpy(s->data[s->len], copied_str);
s->len += 1;
}
Кроме того, моя реализация стека просто:
struct stack {
char **data;
int len;
int maxlen;
};
Когда я запускаю это, моя функция strcpy (с третьей до последней строки stack_pu sh) выдает ошибку памяти, в частности, segmentation-fault-on-null-address, и я понятия не имею, почему это происходит. У меня уже есть строка ADT, включенная в мой код, поэтому функции, такие как strlen, strcmp и даже strcpy, уже должны быть здесь.
Может кто-нибудь помочь мне разобраться в моей проблеме?