use*_*166 1 c segmentation-fault
这是我的代码:
#include <stdio.h>
typedef struct node_struct {
int data;
struct node_struct *next;
} node;
void push(node *top, int data) {
node *new_node = (node*) malloc(sizeof(node));
new_node->data = data;
new_node->next = top;
top = new_node;
}
int main() {
node *top = (node*) malloc(sizeof(node));
top->data = 1;
printf("Set data of top node to: %d\n", top->data);
push(top, 2);
printf("Pushed 2 to top, top->next->data = %d\n", top->next->data);
}
Run Code Online (Sandbox Code Playgroud)
程序段错误在第3行最后一行(push(top, 2);),我想在线top = new_node;
我只是在学习C(现在指针).
我做错了什么?
这里的问题是你将指针传递给top元素by-value,然后你尝试在函数内部设置指针,但它只是一个局部变量,对它的更改在函数外部是不可见的.
top通过引用传递指针,使用指向指针的指针:
void push(node **top, int data) {
node *new_node = malloc(sizeof(node));
new_node->data = data;
new_node->next = *top;
*top = new_node;
}
...
push(&top, 2);
Run Code Online (Sandbox Code Playgroud)
另一种方法是从函数返回新的顶部:
node *push(node *top, int data) {
node *new_node = malloc(sizeof(node));
new_node->data = data;
new_node->next = top;
return new_node;
}
...
top = push(top, 2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |