【问题标题】:Program crashes at the end of this function此函数结束时程序崩溃
【发布时间】:2018-04-05 08:06:59
【问题描述】:
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) );
}

【问题讨论】:

  • 你确定那是c#吗?
  • 这看起来不像 C#...
  • 它看起来像 CC++,而不是 C#
  • 绝对是 C 或 C++,崩溃的原因可能是错误使用导致(很可能)堆栈覆盖的函数。尝试搜索scanf函数的使用方法。
  • 写好问题的技巧; 1)“崩溃”告诉我们什么;如何? 究竟会发生什么? 2)你做了什么来调试它?你走过了吗?它到底发生在哪里? 3) 使用正确的标签;虽然 可以在 C# 中编译,但您实际上在此处使用 C# 不太可能

标签: c#


【解决方案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);

这里有多种可能性,太多了,无法走得更远。

希望这会有所帮助。

【讨论】:

  • 如果我向您展示我的整个程序,您能告诉我如何解决它吗?据我所知,我正在正确调用该函数感谢您的帮助!
  • 只需使用最少的指令集创建一个新程序来重现相同的错误,然后编辑您的问题。
猜你喜欢
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 2014-06-13
  • 1970-01-01
相关资源
最近更新 更多