سلام
تابع به اینصورت کار میکنه که نام کاربری، شماره دانشجویی و رمز عبور یک کاربر رو میگیره، توی یک فایل مینویسه و بعد به طول ارایه داینامیک students (از جنس استراکتی که خودمون تحت عنوان student تعریف کردیم و دو تا رشته کاراکتری و یک عدد صحیح داره)و با استفاده از تابع realloc اضافه میکنه.
مشکلی که هست اینجاست که وقتی به برنامه برای بار اول دستور داده میشه، برنامه به خوبی اجرا میشه، منتها وقتی برای بار دوم این کار رو انجام میدیم با خطای consoleapplication.exe has triggered a breakpoint. مواجه میشیم. که بعد با زدن روی دکمه break پنجره disassembly باز میشه(مطابق تصویر)
void signup_func(student *students,long long max_word_character,int *student_number,FILE *users) { // add a student to last line of users.txt
char *username = (char *)malloc(max_word_character*sizeof(char));
char *password = (char *)malloc(max_word_character*sizeof(char));
int student_id;
input_students(&students, *(student_number), users);
scanf("%s %d %s", username,&student_id, password);
fseek(users, zero, SEEK_SET);
for (int i = zero; i < *(student_number); i++) { // check for simularity
if (students[i].student_id== student_id || !strcmp(students[i].username, username)) {
printf("user already exists\n");
return;
}
}
fseek(users, zero, SEEK_END);
fprintf(users, "%s %d %s\n", username, student_id, password);
*(student_number) = *(student_number)+one;
students = (student*)realloc(students, *(student_number)*sizeof(student));
students[*(student_number)-1].username = (char *)malloc(max_word_character*sizeof(char));
students[*(student_number)-1].password = (char *)malloc(max_word_character*sizeof(char));
strcpy(students[*(student_number)-1].username, username);
strcpy(students[*(student_number)-1].password, password);
students[*(student_number)-1].student_id = student_id;
printf("done\n");
}
http://www.7khatcode.com/?qa=blob&qa_blobid=2369450904237208184
http://www.7khatcode.com/?qa=blob&qa_blobid=8007244497841371097
از ویژوال استودیو نسخه enterprise سال 2015 استفاده میکنم