c - C中的OOP,实现和错误

标签 c oop

我正在尝试在 C 中探索 OOP。然而我是 C n00b,并且想挑选 stackoverflow 的聪明才智 :)

我的代码如下:

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

typedef struct speaker {
    void (*say)(char *msg);
} speaker;

void say(char *dest) {
  printf("%s",dest);
}

speaker* NewSpeaker() {
  speaker *s;
  s->say = say;
  return s;
}

int main() {
  speaker *s = NewSpeaker();
  s->say("works");
}

但是,如果我从 say 中删除所有 args 并使其无效,我就会从中得到一个段错误,我可以让它正常工作。我当前的代码有什么问题?

还有。虽然这在 C 中实现了一种对象形式,但我试图通过继承进一步实现它,甚至重写/重载方法。您认为我该如何实现?

谢谢!

最佳答案

在您的代码中,NewSpeaker() 实际上并未创建"new"扬声器。您需要使用内存分配函数,例如 malloccalloc .

speaker* NewSpeaker() {
   speaker *s = malloc(sizeof(speaker));
   s->say = say;
   return s;
}

没有分配值,例如 malloc 的返回值,s 被初始化为堆栈中的垃圾,因此出现段错误。

关于c - C中的OOP,实现和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574815/

相关文章:

Ruby 方法如 `self` 引用实例

php - 为什么我应该抽象我的数据层?

c# - 策略模式和 "action"类爆炸

c - 当我有一个指向结构的指针时,为什么我必须使用 malloc?

c - 为什么使用 "register"关键字会使我的代码更快?

c - 如何检测模型特定寄存器是否存在

c - 如何以编程方式转换音频(diy)?

c - 在文件中搜索和替换会导致访问冲突

c# - 方法设计——清晰或多功能

oop - 面向方面编程与面向对象编程