以下代码的行为是什么?

时间:2015-05-08 05:55:35

标签: c pointers

#include <stdio.h> 
#include <stdlib.h>

struct node { 

    int data; 
    struct node *next;
}; 
struct node* insert(struct node *root) {

    root->data = 12; //here
    return root; 
}
int main() {

    struct node *root;
    insert(root);
    return 0; 
}

我的程序在insert函数中放置评论的位置是不是因为我没有使用malloc初始化它?

2 个答案:

答案 0 :(得分:3)

这称为undefined behavior 你永远不知道会发生什么。冲突仍然是可能的。

使用未初始化的variabled导致未定义的行为。

答案 1 :(得分:-1)

只需添加一个printf进行一些测试:

printf("root is %p\n", root);

一些结果:

Airbus /tmp » ./a.out
root is 0x7fff50b84a08
Airbus /tmp » ./a.out
root is 0x7fff5d1a6a08
Airbus /tmp » ./a.out
root is 0x7fff5ed7da08
Airbus /tmp » ./a.out
root is 0x7fff5c7f5a08
Airbus /tmp » ./a.out
root is 0x7fff5fb3aa08
Airbus /tmp » ./a.out
root is 0x7fff5c16ea08
Airbus /tmp » ./a.out
root is 0x7fff579a8a08

Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)

我在我的gentoo中得到了段错误:

[1]    8390 segmentation fault

gcc version 4.5.4 (Gentoo 4.5.4 p1.2, pie-0.4.7)