写了一段代码,感觉没有问题,mac上运行就是报错 bus error,去 win 上测试了一下完全没问题,烦死了,也不知道怎么改。
#include<stdio.h>
#include<stdlib.h>
typedef struct Complex_Node {
float real;
float imaginary;
struct Complex_Node *next;
}Node;
void Init(Node* address){
address = (Node*)malloc(sizeof(Node));
if(address == NULL){
printf("ERROR");
return;
}
(*address).next = NULL;
return;
}
void Add(Node* address,float real_part,float image_part){
// 这边没有加判断条件,就是做个测试,而且初始化后是空的,就直接加到头节点后面了
Node* p;
(*p).real = real_part;
(*p).imaginary = image_part;
(*p).next = NULL;
(*address).next = p; // 经过测试,不访问 p 地址就不报错,但不知道怎么改
return;
}
// void get(Node* address){
// Node * p = address;
// while (p!=NULL)
// {
// printf("%f",(*p).real);
// printf("%f",(*p).imaginary);
// p = (*p).next;
// }
// }
int main(){
Node* index;
Init(index);
Add(index,0.5,1.0);
}
Init 方法改成这样:
Init 调用改成下面这样:
你之前的写法,
index
变量实际上没有修改成功,它实际上是一个无意义的地址(不是空指针)。想要通过函数修改指针变量,传递的需要是指针的地址,否则修改不会成功。
例如: