私はいくつかの株式市場データを保存するクラスプロジェクトのリンクリストを作成しています。私はヒープにmallocingの代わりにいくつかのデータをスタックに格納しようとしていました。私はmemcpyを使ってこれをしようとしています。私のコードは次のようである:私は新しいノードを作成し、私はそれのためのスペースををmallocする必要があるときmallocingの代わりにmemcpyを使用してスタックに領域を保存する
struct trade{
int a,b;
float c;
struct trade *n;
};
char stack[100];
int i = 0;
void newNode(struct trade **head, int a, int b, float c){
struct trade *node;
if(i<99){
memcpy(&a,&stack[i],4);
i = i + 4;
node = (struct lnode*) malloc(16);
}
else
node = (struct lnode*) malloc(20);
}
.....
.....
}
マイnewnode関数が呼び出されます。
スタック配列にまだ空きがある場合は、スタック配列にintをコピーします。それ以外の場合は、ヒープにmallocします。私は20と16を使用する理由は、私はスタックにintを格納しているので、私は20バイトのmallocスペースの他の私の構造体の残りの16バイトのmallocスペースが必要です。
何らかの理由で私はこれを行うときにセグメンテーションを取得します。誰かが私を正しい方向に向けることができたら、私はそれを感謝します。
ありがとうございます!
'i'が' 96'で 'int'の4番目のバイトがmemcpy() 'dのときはどうなりますか? – user268396
まあ私は96になることはできません。インデックスが0から始まり、4だけインクリメントするので、95になり、4番目のバイトをコピーするとスタック配列の終わりに達し、内部には入りませんそのifステートメントはもう – AndroidDev93
なぜあなたはそれをこのようにしようとしていますか? –