私は何時間も進歩していませんでした。 scanf()が呼び出されたときに私のプログラムがクラッシュする理由を知る必要があります。エラーメッセージ:「セグメンテーションフォールト;コアがダンプされました」は、ダイナミックアレイにメモリを正しく割り当てていないと考えられます。この場合、配列に1つの構造体を追加するためにメモリを正しく割り当てる方法を教えてもらえますか?私は、メニューから三番目のオプションを選択し、それが配列を反復処理し、各講師の名前を印刷する必要がありますが、私が得るすべては私が帰属空白行と最後のインストラクター名ですいくつかのインストラクターの名前を入力した後* char []に文字列を書くことができません
#include <stdio.h>
#include <stdlib.h>
/*
*
*/
enum Subject{
SER = 0, EGR = 1, CSE = 2, EEE = 3
};
struct Course{
enum Subject sub;
int number;
char instructor_name[1024];
int credit_hours;
}*course_collection;
int total_courses = 0;
int total_credits = 0;
void course_insert();
void resizeArray();
int main(int argc, char** argv) {
int choice = 0;
while(choice != 4){
printf("Welcome to ASU, please choose from the menu"
"choices.\n\n");
printf("_____________________________________________\n\n");
printf("Menu:\n 1.Add a class\n 2. Remove a class\n"
" 3.Show classes\n 4.Quit");
printf("\n\nTotal credit hours: %d\n\n", total_credits);
printf("\n\n_________________________________________");
scanf("%d", &choice);
if(choice == 1){
resize_array(total_courses);
course_insert();
}
else if(choice == 3)
print_courses();
}
return (EXIT_SUCCESS);
}
void resize_array(int total_courses) {
course_collection = malloc(total_courses +
sizeof(course_collection));
}
void print_courses() {
int i;
for(int i = 0; i < total_courses; i++){
printf("\nInstructor: %s\n\n",
course_collection[i].instructor_name);
}
}
void course_insert(){
printf("\n\nEnter the instructor's name\n\n");
scanf("%s" , course_collection[total_courses].instructor_name);
total_courses++;
}
//will crash just after scanf();
//must press 1 & enter for correct output
。
UPDATE @ user3545894私はこれを試しましたが、うまくいくように見えますが、出力が正しくないという問題がまだ発生します。私は配列を繰り返し処理し、各添え字に文字列を出力することができます。
{注意深く 'N' ではない観察}喜びeこれを問題を再現する[mcve]に減らします。または、独自のデバッガでコードをステップ実行します。 –
このコードが動作する理由はわかりません。実際に配列を作成することはありません。 –
コンパイラの警告を有効にします。 – EOF