このCコードをコンパイルするのに苦労しています。struct in cの関数のみ
は、基本的に何が起こるかです:
- それがコンパイルんが、私は(ターミナルで)それを実行すると、それは私を出力します。私はそれをデバッグしようとした
- 不正な命令とXcode上で、それがしようとしたときに実行します(*分数)の.print()、それは言う:
EXC_BAD_ACCESS
- 私はすべてが
GNU99と(私は次の行を削除した場合、同じ問題が発生した)正常に動作します(*分数)の.print()の行を削除した場合-fn ested-機能フラグが
を有効になっている私は、このコードは、main関数にだけ他のもの
を変更したくない全体の午後のために狂気私を運転したので、少しの助けは本当にいただければ幸いです。 ありがとう
#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;
}
Btwでは、 '(* fraction).XXX'の代わりに' fraction-> XXX'を使うことができます。 – Mysticial