2011-07-18 19 views
-3

次のプログラムでは、reallocによって割り当てられたアドレスが、mallocによって割り当てられたアドレス範囲に入ります。なぜ私は理解できません。 (メモリの解放見逃してください。)reallocに関する質問

#include<stdio.h> 
#include<stdlib.h> 


    struct MyClass 
    { 
     double num; 
    }; 

    struct node 
    { 
     MyClass* array; 
     int max_size; 
     double w[10]; //used only to increase the size of node 
     long double ld; 
    }; 




    void fill(struct node *ptr) 
    { 
     MyClass *tmp; 

     if(ptr->array==NULL) 
     tmp = (MyClass*)realloc(ptr->array, 10*sizeof(MyClass)); 

     printf("addr range of node: %p <--> %p\n", ptr, &(ptr->ld)); 
     printf("addr recvd by tmp: %p\n", tmp); 
     if(tmp) 
     { 
     ptr->array=tmp; 
     ptr->array[0].num=32.23; 
     ptr->ld = 33.1321; 
     } 
    } 


struct node* 
    allocator() 
     { 
     struct node* ptr =(struct node*)malloc(sizeof(struct node*)); 
     ptr->max_size= 232; 
     ptr->ld =321.3425; 
     ptr->array = __null; 
     return ptr; 
     } 

    int 
    main() 
    { 
     struct node *ptr =allocator(); 
     fill(ptr); 
     printf(" %Lf %lf\n", ptr->ld, ptr->array[0].num); 
     return 0; 
    } 

出力:x64のLinux上で実行さ

addr range of node: 0xa2a010 <--> 0xa2a070 

addr recvd by tmp: 0xa2a030 

33.0 32.230000 

を。

+1

なぜすべきですか?どうしたの? – littleadv

+6

これは、プログラムのサイトで 'plz find error 'ではありません。 –

+1

-1、少なくとも、自分で問題を診断しようとする(デバッガなどのツールを使用して、ここでもそこそこの控えめな文章でさえ) - 純粋な怠惰... – Nim

答えて

3

struct node* ptr =(struct node*)malloc(sizeof(struct node*));

struct node* ptr =(struct node*)malloc(sizeof(struct node));

+0

ありがとう、私の日を節約.. :) – raja