Aşağıdaki gibi bir yaprağım var: chars öğesinin uzunluğunu döndürecek "length" adlı bir işleve işaretçi.C struct öğesinin üyesi olarak işlev işaretçisi
: bir PString bir işaretçiyi geri döndürmektedirint length(PString * self) {
return strlen(self->chars);
}
(a işlev initializeString bulunmakta)
typedef struct pstring_t {
char * chars;
int (* length)();
} PString;
bir PString bir işaretçi karakteri uzunluğuna geri dönmesini bir işlevi vardır
PString * initializeString() {
PString *str;
str->length = &length;
return str;
}
Bu str->length = &length
hat benim ayıklayıcısında bir EXC_BAD_ACCESS sinyalini neden olduğundan `yaptığı gibi ben, burada, benim işaretçiler ile çok yanlış bir şey yapıyorum açıktır dönüş strlen (self> Char s). Bu problemle ilgili herhangi bir kavrayış var mı?
Özellikle initializeString() işlevinin PString'e bir işaretçi döndürmesini ve uzunluk işlevinin giriş olarak PString'e işaretçi kullanmasını istiyorum. Bu sadece C'deki temel bir nesne yönelimli sistemin uygulanmasındaki bir deneydir, ancak işaretçilerle başa çıkmada çok fazla tecrübem yok. Bana verebileceğin herhangi bir yardım için teşekkürler.
. Bu durumda, bir yapının kendisini geri döndürmek çok daha iyi. Yapıyı kopyalamak ucuz ve ağır bir yığın ayırmaya gerek yok. Dize nesneleri değer temellidir: Kimlik (adres) içermezler, ancak eşitlikleri içeriklerine dayanır. Bir şekilde OOP sisteminizde de bu anlamda bir ayrım olabilir. –