-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
を。
なぜすべきですか?どうしたの? – littleadv
これは、プログラムのサイトで 'plz find error 'ではありません。 –
-1、少なくとも、自分で問題を診断しようとする(デバッガなどのツールを使用して、ここでもそこそこの控えめな文章でさえ) - 純粋な怠惰... – Nim