電卓をプログラムしようとしていて、修正できないエラーに遭遇しました。実行する計算を入力すると、セグメンテーション違反が発生します。セグメンテーション違反はメモリが不足したときだと思ったので、両方のループが問題であると想定して削除しようとしましたが、うまくいきませんでした。
それは私のmallocでしょうか?
int calculator()
{
int exit = (int *)malloc(sizeof(int));
exit = 1;
while(exit == 1){
printf("Welcome to the calculator, please enter the calculation you wish to make, if you wish to exit type EXIT\n");
float *num1 = (float *)malloc(sizeof(float));
float *num2 = (float *)malloc(sizeof(float));
char operation = (char *)malloc(sizeof(char));
float *ans = (float *)malloc(sizeof(float));
char *string = (char *)malloc(10*sizeof(char));
scanf("%s", &string);
int result = strncmp(string, "EXIT", 10);
if(result == 0){
exit = 0;
}
else{
//scanf("%f%c%f", &num1, &operation, &num2);
int length = strlen(string);
int i;
for(i = 0; i <= length; i++){
printf("forever");
if(isdigit(string[i]) != 0){
num1 = string[i];
}
else{
operation = string[i];
}
}
printf("num1%f\n", num1);
printf("operation%c\n", operation);
printf("num2%f\n", num2);
if(operation == '+'){
*ans = *num1 + *num2;
}
if(operation == '-'){
*ans = *num1 - *num2;
}
if(operation == '/'){
*ans = *num1 / *num2;
}
if(operation == '*'){
*ans = *num1 * *num2;
}
if(operation == '^'){
*ans = (float)pow(*num1,*num2);
}
printf("Your answer is %f\n", ans);
}
}
return 0;
}
出力例:
電卓へようこそ。タイプ EXIT 5+9 を終了する場合は、実行する計算を入力してください。セグメンテーション違反 (コア ダンプ) プロセスが 139(0x8B) を返しました
malloc を使用した理由は、変数に割り当てた値が for ループを終了したときに失われたためです。これで問題は解決していませんが、コードに根本的な問題があると感じています。