c-指针的结构指针出现调用错误



我的calloc有问题,但我不知道为什么。这是我的代码:

void ens_init(ensemble* node, ullong value, uint i){
// *node = malloc(sizeof(struct ensemble)); # Doesn't work
// *node = calloc(1, sizeof(struct ensemble)); # Doesn't work
node = calloc(1, sizeof(struct ensemble));
if (*node == NULL){
printf("Caloc errorn");
exit(-1);
}
(*node)->key = value;
(*node)->index = i;
(*node)->left = NULL;
(*node)->right = NULL;
}

这是我的集成结构:

typedef unsigned int uint;
typedef unsigned long long int ullong;
struct ensemble{
ullong key;
uint index;
struct ensemble* left;
struct ensemble* right;
};
typedef struct ensemble* ensemble;

在处理非确定性有限自动机(法语为NFA或AFN(时,这就是我使用这种结构的原因。我的老师想编程一个函数来确定NFA,在这个函数中我们必须使用树。

以下是我如何调用此函数来测试

int main(int argc, char *argv[]){
ensemble B = NULL;
ens_ajouter(&B, 5, 1);
return 0;
}

感谢您的帮助:(

在调用初始化函数ens_init()之前,尝试调用函数ens_ajouter()。这意味着从未从main()函数调用函数calloc()

我认为您错误地隐藏了类型ensemble是指向struct ensemble指针这一事实。这会使您的代码无法读取。

我建议你把你的typedef改成这样:

typedef struct ensemble ensemble;

或者,更好的是,根本不用typedef。有这样的代码是非常好的:

#include <stdlib.h>
#include <stdio.h>
typedef unsigned int uint;
typedef unsigned long long int ullong;
struct ensemble {
ullong key;
uint index;
struct ensemble* left;
struct ensemble* right;
};
void ens_init(struct ensemble** node, ullong value, uint i) {
*node = calloc(1, sizeof(struct ensemble));
if (*node == NULL){
printf("Calloc errorn");
exit(-1);
}
(*node)->key = value;
(*node)->index = i;
(*node)->left = NULL;
(*node)->right = NULL;
}
int main(void) {
struct ensemble B;
struct ensemble* pointer_to_B;
pointer_to_B = &B;
ens_init(&pointer_to_B, 5, 1);
return 0;
}

为什么?因为它可以让你看到你的分配电话中有一个大问题。在ens_init()中,分配一个足够大的内存区域来容纳struct ensemble,然后将该区域的地址存储在指向结构的指针(而不是指向结构的指示器(中。您甚至没有在main()函数中创建struct ensemble类型的局部变量(我修复了这个问题(。你应该改为写这个(注意星号(:

void ens_init(struct ensemble** node, ullong value, uint i) {
// Asterisk added:
*node = calloc(1, sizeof(struct ensemble));
if (*node == NULL){
printf("Calloc errorn");
exit(-1);
}
(*node)->key = value;
(*node)->index = i;
(*node)->left = NULL;
(*node)->right = NULL;
}

奇怪的是,到处都有指向结构的指针。如果没有必要,你应该避免。

相关内容

  • 没有找到相关文章

最新更新