前提
C言語を学習している初学者です。
現在構造体の学習をしており、構造体のポインタ変数を引数に持つ関数を作成し、
デバックを行ったのですが、エラーが発生してしまい原因が分からず困っています。
原因がお分かりの方がいらっしゃいましたらご教授いただきたいです。
宜しくお願いします。
該当のソースコード
C言語
1#include <stdio.h> 2#include <string.h> 3 4// 学生情報を入れる構造体 5typedef struct { 6 int id; // 学生番号 7 char name[256]; // 氏名 8 int age; // 年齢 9} student_data; 10 11// 学生情報を構造体に格納する関数 12void setData(student_data*, int, char*, int); 13// 学生情報を表示する関数 14void showData(student_data*); 15 16void main() { 17 int i; 18 student_data* data[4]; 19 int id[] = { 1, 2, 3, 4 }; 20 char name[][256] = { "山田", "佐藤", "太田", "中田" }; 21 int age[] = { 18, 19, 21, 18 }; 22 // 学生情報をセット 23 for (i = 0; i < 4; i++) { 24 setData(&data[i], id[i], name[i], age[i]); 25 } 26 // 学生情報を表示 27 for (i = 0; i < 4; i++) { 28 showData(&data[i]); 29 } 30} 31 32void setData(student_data* data, int id, char* name, int age) { 33 data->id = id; 34 strcpy(data->name, name); 35 data->age = age; 36} 37 38void showData(student_data*data) { 39 printf("学生番号:%d ", data->id); 40 printf("氏名:%s ", data->name); 41 printf("年齢:%d\n", data->age); 42}
発生している問題・エラーメッセージ
デバックを実行すると、
例外がスローされました Run-Time Check Failure #2 - Stack around the variable 'data' was corrupted.
と表示されます。
また、標準出力も以下のように学生番号1~3の氏名がおかしな表示になってしまいます。
学生番号:1 氏名: 年齢:18 学生番号:2 氏名: 年齢:19 学生番号:3 氏名: 年齢:21 学生番号:4 氏名:中田 年齢:18
補足情報(FW/ツールのバージョンなど)
開発環境はVisual studio 2019を使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/28 09:50