gpt4 book ai didi

c - 返回指针时出错

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:50 24 4
gpt4 key购买 nike

我正在练习用 C 编写二叉搜索树代码,但遇到了错误。

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

/*struct Node*/
typedef struct Node{
int data;
struct Node* left;
struct Node* right;
}Node;

/*Forward declaration*/
Node *createNode(int data);

int main(int argc, char** argv) {
Node *root;
root = createNode(3); //ERROR

}

Node* createNode(int data){
Node* newNode = (Node*)malloc(sizeof(Node));

if(newNode==NULL){
fprintf(stderr,"Failed to allocate node\n");
exit(1);
}

newNode->data = data;
newNode->left = NULL;
newNode->right= NULL;
return newNode; //ERROR OCCURS HERE

}

当我尝试运行它时运行失败。错误发生在返回 newNode 的过程中。我不确定为什么点没有返回。

我正在使用 netbeans,这就是它所说的

最佳答案

该代码在 c90 和 c99 模式下都可以在 gcc 中正常编译和运行,因此您可以做一些事情。

首先,您应该向我们展示实际错误(这应该与原始问题一起出现)。

其次,获取文件的十六进制转储以确保其中没有有趣的字符,例如使用命令 od -xcb myprog.c

第三,从指定非 void 返回类型的函数返回值也是一种很好的做法。 C 的后期迭代使得 main 不需要这样做,但早期的迭代可能会导致随机值被传回环境。我仍然从 main 返回零,即使我不再需要这样做(很难打破三十年的习惯)。

最后一点可能就是这里发生的情况,具体取决于您使用的编译器和版本。如果 main 没有显式返回,ideaone 的编译器会给出一条不太有用的消息:

Runtime error time: 0 memory: 2376 signal:-1

当你输入返回时,它开始工作:

Success time: 0 memory: 2376 signal:0

NetBeans 的编译器是否有同样的问题我无法评论,但值得一试。

注意到用 gcc --std=c99 编译这段代码然后运行它,返回代码为 0(用 echo $? )。但是,使用 gcc --std=c90 编译它会在运行时给出 8 的返回码。所以这是最可能的原因,NetBeans 在程序完成后解释退出代码。

As an aside, you shouldn't cast the return value from malloc in C. It can hide some subtle errors if, for example, there's no prototype in scope for it and your integers and pointers are not compatible widths.

关于c - 返回指针时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com