私はこのコードを持っています
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
int main(){
void *a, *b;
a = malloc(16);
b = malloc(16);
printf("\n block size (for a): %p-%p : %li", b, a, b-a);
a = malloc(1024);
b = malloc(1024);
printf("\n block size (for a): %p-%p : %li", b, a, b-a);
}
これは、最後に割り当てられたブロック サイズ (16 または 1024) を出力するべきではありませんか? 代わりに 24 と 1032 が出力されるため、割り当てられたメモリの量には 8 バイト余分にあるようです。
私の問題は、(このテスト ケースを作成する前に)malloc()
関数 (1024 バイト) で実行し、割り当てられた結果を返すことです。関数の戻り値でブロック サイズを確認すると、516 ブロックが返されます... 理由がわかりません。これが、割り当てられたバッファで何らかの処理を行った後に発生するメモリ破損の理由である可能性があると思います:)
編集: C のポインターから配列のサイズを取得するにはどうすればよいですか? 同じことを尋ねているようです、再投稿してすみません。
例をより具体的なコードに書き直しました。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
short int * mallocStuff(long int number, short int base){
short int *array;
int size=1024;
array=(short int*)calloc(1,size);
//array=(short int*)malloc(size);
return array;
}
int main(){
short int **translatedArray;
translatedArray=malloc(4*sizeof(short int));
int i;
for(i=0;i<4;i++){
translatedArray[i]=mallocStuff(0,0);
if(i>0)
printf("\n block size (for a): %p-%p : %i",
translatedArray[i], translatedArray[i-1], translatedArray[i]-translatedArray[i-1]);
}
return 0;
}
そして、出力は
block size (for a): 0x804a420-0x804a018 : 516
block size (for a): 0x804a828-0x804a420 : 516
block size (for a): 0x804ac30-0x804a828 : 516
1024より大きい上記の投稿によると、私は間違っていますか?