我正在尝试在 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"扬声器。您需要使用内存分配函数,例如 malloc
或 calloc
.
speaker* NewSpeaker() {
speaker *s = malloc(sizeof(speaker));
s->say = say;
return s;
}
没有分配值,例如 malloc
的返回值,s
被初始化为堆栈中的垃圾,因此出现段错误。
关于c - C中的OOP,实现和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574815/