私は上記のエラーがありますので、私は可能な限り明確にしようとします。"アクセス違反の書き込み場所0x00000000457E8770" Cでmallocを使用
短い説明:
私は新しい構造defininngよ:子供を、と私は種類の子供の新しい配列にメモリ内のスペースを割り当てたいです。 私はmalloc(私のチェックで - >失敗しなかった)をしていて、配列の場合はフィールドの1つに書き込もうとしていますが、タイトルにエラーがあります。 動的割り当てを行ったにもかかわらず、なぜ私はこれらのフィールドに書き込めないのか分かりません。
コメント付きコード:
私は構造体を定義したが、次のように子供を呼ば:
typedef struct
{
char name[16];
candy *kid_candy;
} kid;
(お菓子は私が定義された別の構造体である、私はそれをコピーするneccesaryです必要はありません。彼の定義)
上記の定義は、以下のコードに含まれているhファイルに書かれています。
#include "kindergarten.h"
void AllocateKidsArray(int size);
int main()
{
AllocateKidsArray(3);
}
void AllocateKidsArray(int size){
kid *p_kids_arr = NULL;
int i ;
char blank[16] = {' '};
//In the next line want to allocate space for an array,that his type is kid:
p_kids_arr = (kid*)malloc(size * sizeof(kid));
// checking if allocation failed
if (p_kids_arr == NULL)
{
return -1;
}
else
{
for (i = 0; i < size; i++)
{
//now im trying to change a field in the array I allocated before:
(p_kids_arr + sizeof(kid)*i)->kid_candy = NULL;
//but I always get the error from the title
}
}
}
概要:私はオンライン解決のために、そのエラーを持っていた人々のほとんどを見たとき、彼らはstaitclyポインタを宣言し、それらへの書き込みしようとしたので、
、それを持っていました。 しかし、私の場合、私はmallocをやっていますが、私はちょうど問題が何であるかを理解することができません。そして、それは何か基本的なもののように見えます。
私は何が欠けているのか、何が間違っているのかを理解することは非常に重要です。コードを修正する必要はありません。なぜ私が動的に割り当てたフィールドに書き込むことができないのか理解することです。あなたの助け。
ありがとうございます!
なぜ配列メンバーにアクセスするときに 'sizeof(kid)'で 'i'を掛けますか? – alk
あなたの実際のコードには「」も含まれていますか? –
alk
Cでは、 'malloc()'の結果をキャストする必要はありません。それは役に立たず、本当の間違いを隠す可能性が高いので、 '(kid *)'を削除してください。 – alk