我有一个如下的结构体,其中有一个指向一个名为“length”的函数的指针,该函数将返回chars成员的长度。
typedef struct pstring_t {
char * chars;
int (* length)();
} PString;
我有一个函数来返回从指针到PString的字符长度:
int length(PString * self) {
return strlen(self->chars);
}
我有一个函数initializeString(),它返回一个指向PString的指针:
PString * initializeString() {
PString *str;
str->length = &length;
return str;
}
很明显,我在这里对指针做了一些非常错误的事情,因为str->length = &length
行在我的调试器中导致了EXC_BAD_ACCESS信号,`return strlen(self->chars)也是如此。有人对这个问题有什么见解吗?
我特别希望能够让initializeString()函数返回一个指向PString的指针,并让length函数使用指向PString的指针作为输入。这只是用C实现基本的面向对象系统的一个实验,但我没有太多直接处理指针的经验。谢谢你能给予我的任何帮助。
5条答案
按热度按时间w1e3prcc1#
分配内存以保存字符。
gopyfrb32#
我的猜测是,您的问题的一部分是参数列表不匹配。
和/或
是不一样的应该是
int (* length)(PString *);
。是乔恩
编辑:并且,如下所述,您的结构体指针永远不会被设置为指向任何对象。只有当你声明的是一个普通的结构体,而不是指针时,你这样做才有效。
waxmsbnn3#
也许我在这里遗漏了一些东西,但是在访问PString之前,您是否为它分配了任何内存?
ukdjmx9f4#
指针
str
永远不会被分配。在使用前应该是malloc
'd。ego6inou5#
你也可以使用“void*”(void指针)来发送一个地址给函数。
输出: