C编程中的分段错误

时间:2015-10-23 14:14:57

标签: c

我正在尝试用C编译程序,但是我一直收到以下错误:

Segmentation fault

以下是代码:

#include <stdio.h>
#define calculation1 main
void calculation1(int *num1, int *num2) {

        int total;

        printf("Program One: \n");
        printf("=========== \n");

        printf("Number One: ");
        scanf("%d", &num1);

        printf("Number Two: ");
        scanf("%d", &num2);

        total = *num1 + *num2;

        printf("%d + %d = %d \n",&num1,&num2,total );
}

我在这里做错了什么?我该如何解决这个错误?

3 个答案:

答案 0 :(得分:3)

            <label class="radio-inline">
                <input type="radio" name="scoring" id="standard" value="standard" checked> Standard
            </label>
            <label class="radio-inline">
                <input type="radio" name="scoring" id="decimal" value="decimal"> Decimal
            </label>
            <label class="radio-inline">
                <input type="radio" name="scoring" id="standard_ppr" value="standard_ppr"> Standard PPR
            </label>
            <label class="radio-inline">
                <input type="radio" name="scoring" id="decimal_ppr" value="decimal_ppr"> Decimal PPR
            </label>

scanf需要一个地址,num1和num2已经包含了你在函数中作为指针传递它们的地址。

要改变的另一件事是:

scanf("%d", num1);
scanf("%d", num2);

printf("%d + %d = %d \n",*num1,*num2,total ); 取消引用提供值的指针

答案 1 :(得分:3)

  

我在这里做错了什么?我该如何解决这个错误?

问题1

使用

#define calculation1 main
void calculation1(int *num1, int *num2) {

你实际上是在使用:

void main(int *num1, int *num2) {

这是错误的。 main需要:

int main(void) {

int main(int argc, char** argv) {

您的程序受到未定义的行为。

问题1

您正在使用

scanf("%d", &num1);
scanf("%d", &num2);

num1num2属于int*时。你需要:

scanf("%d", num1);
scanf("%d", num2);

问题3

您正在使用

    printf("%d + %d = %d \n",&num1,&num2,total );

鉴于num1num2的类型,需要:

    printf("%d + %d = %d \n", *num1, *num2, total );

<强>修正

您的计划需要进行一些改革。尝试:

#include <stdio.h>
#define calculation1 main
int calculation1() {

   int num1; // Not int*. If you use int*, you'll need to allocate memory
   int num2;

   int total;

   printf("Program One: \n");
   printf("=========== \n");

   printf("Number One: ");
   scanf("%d", &num1);  // You need to use &num1 since num1 is of type int.

   printf("Number Two: ");
   scanf("%d", &num2);

   total = num1 + num2;

   printf("%d + %d = %d \n", num1, num2, total);
}

答案 2 :(得分:1)

尽管@jayant指出了错误 -

#define calculation1 main
void calculation1(int *num1, int *num2) {

因此,calculation1将替换为main,因此简而言之,这就是您的main功能。

这不是有效的,应该避免任何情况。我很困惑你如何打电话或采取命令行参数?但这绝对是错误的。

简单地说,这样做 -

int main(void)int main(int argc,char *argv[])并将num1num2声明为int变量,然后在其中输入并执行所需的操作。