0

さて、main.m プログラム コードができました。mvds は、新しいインスタンスを作成したときにクラスから借りた割り当てられたメモリを解放することを提案しました。

何らかの理由で、使用してメモリを解放しようとすると

[converter free];

コンバーターが -free に応答しない可能性があるという警告が表示され、プログラムを終了すると、最初にループバックしようとしたり、プログラムを終了しようとしたりすると、ジャンクが大量に吐き出されます。

メモリがオフになっている可能性があるため、メモリを解放しようとしている場所、または設定したループに関係している可能性があると思います。

ここに私のmain.mコードがあります:

#import <Cocoa/Cocoa.h>
#import "class.h"

int main(int argc, char *argv[])
{
    int result;
    int prompt, prompt2;
    int loop = 1;
    double sourceTemp;

    while (loop == 1) {
        printf("\nWlecome to Bossverter, the one-stop shop for all of your temperature converting needs!  Please choose a source temperature scale:\n[1] Fahrenheit\n[2] Celsius\n[3] Kelvin\n[4] Rankine\n\n");

        result = scanf("%i", &prompt);

        if (result != 1)
            printf("Bossverter couldn't understand your input, Bossverter only needs one number!");

        else if (result == EOF)
            printf("Bossverter apologizes, Bossverter encountered an error when trying to read your input.");

        else if (result == 1)
        {
            printf("\nNow, please enter the temperature you would like to convert:\n\n");

            scanf("%lf", &sourceTemp);

            TemperatureConverter *converter = [[TemperatureConverter alloc] init];

            switch (prompt) 
            {
                case 1:
                    //end-user chooses Fahrenheit
                    [converter setFahrenheitValue:sourceTemp];
                    break;

                case 2:
                    //end-user chooses Celsius
                    [converter setCelsiusValue:sourceTemp];
                    break;

                case 3:
                    //end-user chooses Kelvin
                    [converter setKelvinValue:sourceTemp];
                    break;

                case 4:
                    //end-user chooses Rankine
                    [converter setRankineValue:sourceTemp];
                    break;
            }

            printf("\nNow, please choose a target temperature scale:\n[1] Fahrenheit\n[2] Celsius\n[3] Kelvin\n[4] Rankine\n\n");

            scanf("%i", &prompt2);

            char *scales[4] = { "Fahrenheit", "Celsius", "Kelvin", "Rankine" }; 

            switch (prompt2) 
            {
                case 1:
                    //end-user chooses Fahrenheit
                    printf("\n%lf degrees %s is %lf degrees Fahrenheit\n", sourceTemp, scales[prompt-1], [converter fahrenheitValue]);
                    break;

                case 2:
                    //end-user chooses Celsius
                    printf("\n%lf degrees %s is %lf degrees Celsius\n", sourceTemp, scales[prompt-1], [converter celsiusValue]);
                    break;

                case 3:
                    //end-user chooses Kelvin
                    printf("\n%lf degrees %s is %lf degrees Kelvin\n", sourceTemp, scales[prompt-1], [converter kelvinValue]);
                    break;

                case 4:
                    //end-user chooses Rankine
                    printf("\n%lf degrees %s is %lf degrees Rankine\n", sourceTemp, scales[prompt-1], [converter rankineValue]);
                    break;
            }

            printf("\nI'm glad you just Bossverted something.  Would you like to Bossvert again?\n[1] Yes!\n[2] No way man, I'm OUT!\n\n");

            scanf("%i", &loop);

            [converter free];

        }

    }



    return 0;
}
4

2 に答える 2

2
  1. あなたは持っていませんNSAutoreleasePool-それは危険です(そしておそらく間違っています)。
  2. releaseではなく、使用してくださいfree
于 2010-08-11T17:36:12.047 に答える
1

freeNSObject メソッドではなく、C ライブラリ呼び出しです。お探しのメッセージは次のreleaseとおりです。

[converter release];
于 2010-08-11T17:37:24.010 に答える