質問です。
メモリ関数と構造体を使用して、簡易データベースを作りたいのですが
構造体にメモリを割り当てるにはどうすればいいんですか?

構造体宣言を
struct main_deta{
int deta_id;//データID
char deta_name;//データネーム
int deta_value;//データヴァリュー(数値)

}*p;//確保したメモリのアドレス。データの格納先

このように書いて

p = calloc(w, sizeof(struct main_deta));
printf("データIDを入力してください。   :");
scanf("%d",&p[i].deta_id);
printf("データネームを入力してください。  :");
scanf("%s",&p[i].deta_name);
printf("データヴァリューを入力してください。:");
scanf("%d",&p[i].deta_value);

この形で入力して表示させようとすると
「"0x0040832c"の命令が"0x00000031"のメモリを参照しました。
メモリが"rezd"になることはできませんでした」と、でてきます。

このエラーは何なんですか?

よろしくお願いします。