Aracılığıyla paylaş


_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 NULListenen 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 errnodaha fazla bilgi için bkz.errno , _doserrno, _sys_errlistve _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 _expandindirgenir. 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 newSizebiraz 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_MAXREQbü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.

Ayrıca bkz.

Hata ayıklama yordamları
_malloc_dbg