char 배열을 저장하기 위해 C로 스택 구조를 구현하려고합니다.C에서 "strings"스택 구현
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 '와 같은 새 스택이 추가됩니다. 그리고 스택을 pop하고 싶을 때, pop 된 값은 비어 있습니다. null도 아니고 빈 문자열 또는 무엇인가?
내가 뭘 잘못하고 있는지 잘 모르겠지만 분명히 어딘가에 실수가있는 것 같습니다.
새미
당신은이 코드를 어디에서 호출하는지 표시하지 않지만 내 생각에 정적 버퍼 또는 다른 이름에'name'이 있습니까? 실제 문자열을 스택에 저장하려면 각 문자열을 배치하기 전에 각 문자열을 할당해야합니다. 또는'* ((loods-> data) + loods-> size ++) = strdup (name)'을 할 수 있습니다. 나중에 개별적으로 해제하면됩니다. –