当我将一个字符串插入到我的堆栈中时,它会添加它,但也会更改所有以前的元素。
void push(linkedList *ll,char *item) {
node *newNode = malloc(sizeof(node));
if (ll->size == 0) {
newNode->value = item;
newNode->next = NULL;
ll->head = newNode;
ll->tail = newNode;
ll->size++;
}
else {
newNode->value = item;
newNode->next = ll->head;
ll->head = newNode;
ll->size++;
}
}
int main() {
linkedList* stack = init();
int scan = 1;
char * p = malloc(sizeof(char) * 5);
while (scan = 1) {
scanf("%1s", p);
if (*p >= '0' && *p <= '9') {
push(stack, p);
print(stack);
}
}
WINPAUSE;
}
输出看起来像这样:
插入5
5
插入7
7 - &gt; 7
插入8
8 - &gt; 8 - &gt; 8
答案 0 :(得分:0)
每次都添加相同的指针。您分配了一次该内存,并不断替换其内容。由于列表中的每个节点都保持相同的指针值,遍历列表将返回最近输入的数据,包括数据是否甚至不在有效范围内。
最合适的解决方案(许多选项)可能是做以下事情之一:
char
值而不是指针,因为您一次只能保留一个字符(如果这适合您的任务)答案 1 :(得分:0)
这是因为newNode->value = item
,它存储在您的节点中,始终是指向p
之外保留的同一内存位置push
的指针,并一次又一次地覆盖新内容。要解决此问题,请编写newNode->value = strdup(item)
以复制内容。别忘了以后再免费。如果strdup
不可用,您可以轻松地将其替换为newNode->value = malloc(strlen(item)+1);strcpy(newNode->value, item)
。