0

動的メモリ割り当てに問題があります。ここにコードがありますので、助けてください。

#include <stdio.h>
int i;

typedef struct{
  int A;  
}node;


typedef struct Model
        {                            
            node *m;    
        } Model;
        Model M;

void initialize(Model *a, int size)
{
    a->m = (node*) malloc(size);
}


void model_init(Model *a, int len)
{
    int i;
    for (i=0;i<len;i++) a->m[i].A = 20;
}


int main()
{
initialize(&M ,10);
model_init(&M, 10);
for (i=0;i<10;i++) printf("%d\n",M.m[i].A);
}

10 個のノードを持つモデルを作成しようとしていて、変数 A のノードに値を割り当てたいと考えています。

たとえば、 Mm[2].A=20と言いたいだけです

私は何を間違っていますか?助けてください。

タイ

4

3 に答える 3

7
void initialize(Model *a, int size)
{
    a->m = (node*) malloc(sizeof(node) *size); // NOTICE HERE!!!!
}
于 2012-12-03T13:04:49.290 に答える
4

関数initializeが多数のバイトを割り当てたmodel_init後、多くのノード インスタンスが使用可能になると想定します。 node1 バイトより大きい (少なくとも sizeof(int) バイト) ため、割り当てられたメモリの末尾を超えて書き込みます。

最も簡単な修正は、次のように変更することinitializeです。

void initialize(Model *a, int elements)
{
    a->m = malloc(elements * sizeof(node));
}
于 2012-12-03T13:05:47.327 に答える
1

malloc をキャストする必要がないという事実の詳細については、: malloc の結果をキャストしますか?

于 2012-12-03T14:28:33.603 に答える