_expand_dbg

Belirtilen bir Öbek bellek bloğunu genişletme veya blok (yalnızca hata ayıklama sürümü) ile sözleşme yeniden boyutlandırır.

void *_expand_dbg( 
   void *userData,
   size_t newSize,
   int blockType,
   const char *filename,
   int linenumber 
);

Parametreler

  • userData
    Önceden ayrılmış bellek bloğu için işaretçi.

  • newSize
    Yeni boyutunu (bayt cinsinden) blok istedi.

  • blockType
    Yeniden boyutlandırılan blok türü istendi: _CLIENT_BLOCK veya _NORMAL_BLOCK.

  • filename
    İstenen kaynak dosyanın adını işaretçisine işlemi genişletin veya NULL.

  • linenumber
    Satır numarası burada genişletme işlemi istendi kaynak dosyadaki veya NULL.

filename Ve linenumber parametreleri yalnızca kullanılabilir ne zaman _expand_dbg açıkça adlı veya _CRTDBG_MAP_ALLOC önişlemci sabit tanımlı.

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şınmaz çünkü userData aynı adrestir.Bir hata oluştu veya blok istenen boyuta genişletilemedi, onu verir NULL.Bir hata oluşursa, errno hata ile işletim sisteminden doğası hakkındaki bilgidir.errno hakkında daha fazla bilgi için bkz. errno, _doserrno, _sys_errlist, and _sys_nerr.

Notlar

_expand_dbg İşlevdir _ bir hata ayıklama sürümügenişletin işlev.Zaman _DEBUG tanımlı değilse, her arama _expand_dbg bir çağrı için sınırlı _expand.Her ikisi de _expand ve _expand_dbg temel yığınındaki bellek bloğunu yeniden boyutlandır ama _expand_dbg birkaç hata ayıklama özellikleri kapsar: arabellekleri her iki tarafındaki sızıntıları, belirli ayırma, izlemek için bir blok türü parametresi sınamak için blok kullanıcı bölümünü ve filename/linenumber ayırma isteklerini kaynağını belirlemek için bilgi.

_expand_dbgİstenen biraz daha fazla alan ile belirtilen bellek bloğunu yeniden boyutlandırır newSize.newSizedaha büyük veya daha küçük başlangıçta ayrılan bellek bloğu boyutu olabilir.Ek alan tarafından hata ayıklama yığın yöneticisinin hata ayıklama bellek bloklarını bağlama ve uygulama ile hata ayıklama başlık bilgilerini sağlar ve arabellekleri üzerine yazmak için kullanılır.Resize genişleterek veya özgün bellek bloğu ile sözleşme yapılır._expand_dbgbellek bloğu gibi taşınmaz _realloc_dbg işlev.

Zaman newSize özgün blok boyutu, bellek bloğu genişletilmiş daha büyüktür.İstenen boyuta sığması için bellek bloğu genişletilemez ise bir genişleme sırasında NULL döndürülür.Zaman newSize yeni boyutu alınana kadar özgün blok boyutu, bellek bloğu sözleşme yapılan daha az olur.

Bellek bloklarının taban yığının hata ayıklama sürümünde nasıl ayrıldığı, başlatıldığı ve yönetildiği hakkında bilgi için, bkz. CRT Hata Ayıklama Öbeği Ayrıntıları.Ayırma blok türleri ve nasıl kullanılacakları hakkında daha fazla bilgi için bkz: hata ayıklama öbek üzerindeki blokları türleri.Bir uygulamanın hata ayıklama yapı içinde bir standart yığın işlevi ve hata ayıklama sürümünü çağırmak arasındaki farklar hakkında daha fazla bilgi için bkz: Öbek Atama İşlevleri Hata Ayıklama Sürümleri.

Bu işlev, parametrelerini doğrular.Yoksa memblock bir null işaretçi veya boyutu büyükse _HEAP_MAXREQ, bu işlev içinde tanımlandığı gibi bir geçersiz parametre işleyicisi çağırır Parametre Doğrulama.Yürütmenin devam etmesine izin verilirse, errno öğesi EINVAL olarak ayarlanır ve işlev NULL döndürür.

Gereksinimler

Yordam

Gerekli başlık

_expand_dbg

<crtdbg.h>

Daha fazla ek uyumluluk bilgileri için bkz. Uyumluluk.

Kitaplıklar

Yalnızca C çalışma zamanı kitaplıklarının hata ayıklama sürümleri.

Ö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 );
}
  

Açıklama

Bu programın çıktısı tüm bölümleri genişletmek için bilgisayarınızın yeteneklerine bağlı olarak değişir.Tüm bölümler genişletilmiş ise, çıktıyı Çıktı bölümünde yansıtılır.

.NET Framework Eşdeğeri

Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.

Ayrıca bkz.

Başvuru

Hata Ayıklama Yordamları

_malloc_dbg