sau*_*wal 2 c pointers memory-management dereference
我已经为树写了ac程序.
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *left;
struct node *right;
};
struct node* newNode(int value){
struct node* temp;
temp->left = NULL;
temp->right = NULL;
temp->data = value;
return temp;
}
int main(){
struct node *root;
root = newNode(60);
root->left = newNode(40);
root->right = newNode(80);
root->left->left = newNode(30); // program crashes here.
root->left->right = newNode(50);
}
Run Code Online (Sandbox Code Playgroud)
这是我写的另一个程序的子部分.调试时我意识到我在分配时遇到错误newNode(30).我不明白为什么?
在你的newNode()功能中,你正在做
struct node* temp;
temp->left = NULL; //invalid memory access
temp->right = NULL; //invalid memory access
temp->data = value; //invalid memory access
Run Code Online (Sandbox Code Playgroud)
但是,temp没有分配任何有效的内存.当您取消引用无效指针时,它会调用未定义的行为.
您需要temp在取消引用之前分配内存temp.你可以利用malloc()和家人来完成这件事,比如,
struct node* temp = malloc (sizeof *temp);
if (temp )
{
temp->left = NULL;
temp->right = NULL;
temp->data = value;
}
Run Code Online (Sandbox Code Playgroud)
应该完成工作.
| 归档时间: |
|
| 查看次数: |
29 次 |
| 最近记录: |