_expand_dbg
Öbekteki belirtilen bellek bloğunu genişleterek veya daraltarak yeniden boyutlandırıyor (yalnızca hata ayıklama sürümü).
Sözdizimi
void *_expand_dbg(
void *userData,
size_t newSize,
int blockType,
const char *filename,
int lineNumber
);
Parametreler
userData
Önceden ayrılmış bellek bloğunun işaretçisi.
newSize
Blok için yeni boyut istendi (bayt cinsinden).
blockType
Yeniden boyutlandırılan blok için istenen tür: _CLIENT_BLOCK
veya _NORMAL_BLOCK
.
filename
genişletme işlemi veya NULL
istenen kaynak dosyanın adına yönelik işaretçi.
lineNumber
Genişletme işleminin istendiği kaynak dosyadaki satır numarası veya NULL
.
filename
ve lineNumber
parametreleri yalnızca açıkça çağrıldığında _expand_dbg
veya önişlemci sabiti _CRTDBG_MAP_ALLOC
tanımlandığında kullanılabilir.
Dönüş değeri
Başarıyla tamamlandığında, _expand_dbg
yeniden boyutlandırılan bellek bloğuna bir işaretçi döndürür. Bellek taşınmadığından, adres userData ile aynıdır. Bir hata oluştuysa veya blok istenen boyuta genişletilemediyse döndürür NULL
. Bir hata oluşursa, errno
hatanın doğası hakkında işletim sisteminden gelen bilgilerle olur. hakkında errno
daha fazla bilgi için bkz.errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
İşlev _expand_dbg
, _expand
işlevinin hata ayıklama sürümüdür. Tanımlanmadığında _DEBUG
, çağrısının her _expand_dbg
biri öğesine yapılan çağrıya _expand
indirgenir. Hem hem de _expand
temel yığındaki bir bellek bloğunu yeniden boyutlandırın, ancak _expand_dbg
birkaç hata ayıklama özelliğini barındırır: sızıntıları test etmek için bloğun kullanıcı bölümünün her iki tarafındaki arabellekler, belirli ayırma türlerini izlemek için bir blok türü parametresi ve filename
/lineNumber
ayırma isteklerinin kaynağını belirlemeye yönelik bilgiler._expand_dbg
_expand_dbg
belirtilen bellek bloğunu istenenden newSize
biraz daha fazla alanla yeniden boyutlandırıyor. newSize
özgün olarak ayrılan bellek bloğunun boyutundan büyük veya daha küçük olabilir. Ek alan, hata ayıklama yığın yöneticisi tarafından hata ayıklama bellek bloklarını bağlamak ve uygulamaya hata ayıklama üst bilgisi bilgileri sağlamak ve arabelleklerin üzerine yazmak için kullanılır. Yeniden boyutlandırma, özgün bellek bloğu genişletilerek veya daraltılarak gerçekleştirilir. _expand_dbg
işlevinde olduğu gibi bellek bloğunu _realloc_dbg
taşımaz.
Özgün blok boyutundan büyük olduğunda newSize
bellek bloğu genişletilir. Genişletme sırasında bellek bloğu istenen boyuta uyacak şekilde genişletilemiyorsa döndürülür NULL
. Özgün blok boyutundan küçük olduğunda newSize
, bellek bloğu yeni boyut elde edilene kadar küçültülr.
Temel yığının hata ayıklama sürümünde bellek bloklarının nasıl ayrıldığı, başlatıldığı ve yönetildiğini öğrenmek için bkz . CRT hata ayıklama yığını ayrıntıları. Ayırma bloğu türleri ve bunların nasıl kullanıldığı hakkında bilgi için bkz . Hata ayıklama yığınındaki blok türleri. Standart yığın işlevleri ile hata ayıklama sürümleri arasındaki farklar hakkında bilgi için bkz . Yığın ayırma işlevlerinin sürümlerinde hata ayıklama.
Bu işlev parametrelerini doğrular. Boş bir işaretçiyse userData
veya boyut değerinden _HEAP_MAXREQ
büyükse, bu işlev Parametre doğrulama bölümünde açıklandığı gibi geçersiz bir parametre işleyicisi çağırır. Yürütmenin devam etmesi için izin verilirse, errno
olarak ayarlanır EINVAL
ve işlevi döndürür NULL
.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
_expand_dbg |
<crtdbg.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Kitaplıklar
Yalnızca C çalışma zamanı kitaplıklarının sürümlerinde hata ayıklama.
Örnek
// crt_expand_dbg.c
//
// This program allocates a block of memory using _malloc_dbg
// and then calls _msize_dbg to display the size of that block.
// Next, it uses _expand_dbg to expand the amount of
// memory used by the buffer and then calls _msize_dbg again to
// display the new amount of memory allocated to the buffer.
//
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <crtdbg.h>
int main( void )
{
long *buffer;
size_t size;
// Call _malloc_dbg to include the filename and line number
// of our allocation request in the header
buffer = (long *)_malloc_dbg( 40 * sizeof(long),
_NORMAL_BLOCK, __FILE__, __LINE__ );
if( buffer == NULL )
exit( 1 );
// Get the size of the buffer by calling _msize_dbg
size = _msize_dbg( buffer, _NORMAL_BLOCK );
printf( "Size of block after _malloc_dbg of 40 longs: %u\n", size );
// Expand the buffer using _expand_dbg and show the new size
buffer = (long *)_expand_dbg( buffer, size + sizeof(long),
_NORMAL_BLOCK, __FILE__, __LINE__ );
if( buffer == NULL )
exit( 1 );
size = _msize_dbg( buffer, _NORMAL_BLOCK );
printf( "Size of block after _expand_dbg of 1 more long: %u\n",
size );
free( buffer );
exit( 0 );
}
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _expand_dbg of 1 more long: 164
Yorum
Bu programın çıkışı, bilgisayarınızın tüm bölümleri genişletebilmesine bağlıdır. Tüm bölümler genişletilirse çıkış Çıkış bölümüne yansıtılır.