程序在此函数结束时崩溃

时间:2018-04-05 08:07:00

标签: c#

void student_info(char *name, int *hw1, int *hw2, int *hw3, int *ex1, int *ex2)
{
    printf("Please enter the student's name:\n");
    gets_s(name, 20);

    printf("\nPlease enter the student's homework grades:\n");
    scanf("%d %d %d", & (*hw1), & (*hw2), & (*hw3) );

    printf("\nPlease enter the student's exam scores:\n");
    scanf("%d %d", & (*ex1) , & (*ex2) );
}

1 个答案:

答案 0 :(得分:1)

首先,根据您发布的代码,该代码是C,而不是C#。它可能是C ++,只要你以“C”风格使用它。

其次,& *没什么。如果您通过带有'*'的指针访问内存中的对象(术语更广泛的对象),然后获取指向先前访问过的对象的指针......您基本上什么也没做。可能混淆的原因是scanf()中的变量通常前面带有'&',但如果您已经传递指针,则不需要这样做。

最后,没有足够的信息来评估程序崩溃的原因。你正在向这个函数传递六个指针,也许其中一个指向无效的内存(以前没有保留的内存或者不属于现有对象的内存)。

这是调用函数的正确方法:

char name[80];
int hw1;
int hw2;
int hw3;
int ex1;
int ex2;
student_info(name, &hw1, &hw2, &hw3, &ex1, &ex2);

这是一种调用函数的错误方法:

char * name;
int * hw1;
int * hw2;
int * hw3;
int * ex1;
int * ex2;
student_info(name, hw1, hw2, hw3, ex1, ex2);

这里有多种可能性,太多无法进一步发展。

希望这有帮助。