0

我在 C 中有一个函数使我的代码崩溃,我很难弄清楚发生了什么。我有一个看起来像这样的函数:

#define cond int
void Enqueue(cond (*cond_func)());

cond read() {
return IsEmpty(some_global); // Returns a 1 or a 0 as an int
}

Enqueue(&read);

但是,在运行上述程序时,一旦调用 Enqueue,它就会出现段错误。它甚至不执行函数内部的任何内容。我运行了 gdb,它只是显示它在 Enqueue 被调用时就死了——其中没有处理任何语句。知道发生了什么吗?任何帮助,将不胜感激。

4

3 回答 3

0
#define cond int

本来是:

typedef int cond;

尽管在这里为函数指针定义别名可能更合理,例如:

typedef int (*FncPtr)(void);

int read() {
    printf("reading...");
}

void foo(FncPtr f) {
    (*f)();
}

int main() {
    foo(read);
    return 0;
}
于 2013-10-05T19:04:57.693 回答
0

您能否提供有关代码的更多信息,因为根据我的解释,代码运行良好。我已经尝试过了-

#define cond int
void Enqueue(cond (*cond_func)());
cond read() 
{
int some_global=1;
return IsEmpty(some_global); // Returns a 1 or a 0 as an int
}

int IsEmpty()
{
return 1;
}

void Enqueue(cond (*cond_func)())
{
printf("Perfect");
return 0;
}

int main()
{
Enqueue(&read);
return 0;
}

它工作正常。

于 2013-10-05T19:25:00.967 回答
0

这工作正常:

#include <stdio.h>
#include <stdbool.h>

typedef bool cond;

void Enqueue(cond (*cond_func)(void)) {
    printf("In Enqueue()...\n");
    cond status = cond_func();
    printf("In Enqueue, 'status' is %s\n", status ? "true" : "false");
}

bool IsEmpty(const int n) {
    return true;
}

cond my_cond_func(void) {
    printf("In my_cond_func()...\n");
    return IsEmpty(1);
}

int main(void) {
    Enqueue(my_cond_func);
    return 0;
}

您的问题可能来自其他地方,例如您Enqueue()未提供的定义,或者您的函数被调用read()并且与该名称的更常见函数冲突的事实。

于 2013-10-05T19:40:01.047 回答