我很難編譯這個C代碼。c中struct中的函數只有
基本上發生的事情是:
- 它編譯,但是當我運行它(對終端),它打印我:非法指令
- 我試圖調試,並在Xcode和它試圖何時執行(*分數).PRINT(),它說:
EXC_BAD_ACCESS
- 如果我刪除了(*分數).PRINT()行一切工作正常(同樣的情況,如果我只刪除下一行)
GNU99和-fn相關捐資函數標誌被允許
我不想改變主函數只是其他的東西
此代碼讓我抓狂了整整一個下午,那麼一點點的幫助將非常感激。 Thankyou
#include <stdlib.h>
#include "string.h"
#include "stdio.h"
typedef struct
{
int numerator;
int denominator;
void (*print)(); // prints on screen "numerator/denominator"
float (*convertToNum)(); //returns value of numerator/denominator
void (*setNumerator)(int n);
void (*setDenominator)(int d);
} Fraction;
Fraction* allocFraction(Fraction* fraction); //creates an uninitialized fraction
void deleteFraction(Fraction *fraction);
Fraction* allocFraction(Fraction* fraction)
{
void print()
{
int a= 10;
printf("%i/%i", (*fraction).numerator, (*fraction).denominator);
a--;
}
float convertToNum()
{
return (float)(*fraction).numerator/(float)(*fraction).denominator;
}
void setNumerator (int n)
{
(*fraction).numerator= n;
}
void setDenominator (int d)
{
(*fraction).denominator= d;
}
if(fraction== NULL)
fraction= (Fraction*) malloc(sizeof(Fraction));
if(fraction)
{
(*fraction).convertToNum= convertToNum;
(*fraction).print= print;
(*fraction).setNumerator= setNumerator;
(*fraction).setDenominator= setDenominator;
}
return fraction;
}
void deleteFraction(Fraction *fraction)
{
free(fraction);
}
int main (int argc, const char * argv[])
{
Fraction *fraction= allocFraction(fraction);
(*fraction).setNumerator(4);
(*fraction).setDenominator(7);
(*fraction).print(); //EXC_BAD_ACCESS on debug. Illegal instruction in Terminal
printf("%f", (*fraction).convertToNum());
(*fraction).print();
deleteFraction(fraction);
return 0;
}
順便說一下,你可以使用'fraction-> XXX'而不是'(* fraction).XXX'。 – Mysticial 2011-12-28 05:32:37