Dev-Cpp中的C代码在运行时中断

时间:2015-04-04 18:14:58

标签: c pointers struct

我有一个如下的C代码。

#include <stdio.h>
#include <stdlib.h>
struct __student{
    char name[20];
    char surname[20];
    int age;
};

typedef struct __student student;

void getStudent(student* stud)
{
    printf("Name: "); scanf("%s",stud->name);
    printf("Surname: "); scanf("%s",stud->surname);
    printf("Age: "); scanf("%d",stud->age);
}

int main(int argc, char *argv[]) 
{
    student* s = (student*)malloc(sizeof(student));
    getStudent(&s);

    return 0;
}

此代码在Dev Cpp 5.10中编译时没有任何错误或警告 但是当我尝试运行这个应用程序时,它在我输入年龄值后就会中断 我不明白是什么问题?

3 个答案:

答案 0 :(得分:6)

您正在传递student**(指向指针的指针),其中您的函数期望student*,它也会发出警告(至少在GCC 4.9.2上) )

将您的代码更改为

int main(int argc, char *argv[]) 
{
    student* s = malloc(sizeof(student)); //also don't cast the malloc
    getStudent(s);
    free(s); //we don't want memory leaks
    return 0;
}

答案 1 :(得分:3)

除了传递上述答案中所述的正确student之外,

printf("Age: "); scanf("%s=d",stud->age);

应该是

printf("Age: "); scanf("%d", &stud->age);

当您输入分配给int的号码时。

答案 2 :(得分:-1)

我可能误解了,但代码中没有错误。您的程序在您输入年龄后立即退出return 0; main就可以了。

此处函数在您输入年龄后立即返回

void getStudent(student* stud)
{
printf("Name: "); scanf("%s",stud->name);
printf("Surname: "); scanf("%s",stud->surname);
printf("Age: "); scanf("%s=d",stud->age);
}

在这里,您正在调用getStudent,然后返回0

student* s = (student*)malloc(sizeof(student));
getStudent(&s); // that's incorrect!!
free(s); //remove this if you're using s after this call

return 0;
}

哦,是的!之前没有得到这个,对不起!你必须使用getStudent(s);代替getStudent(&s);