Aracılığıyla paylaş


_expand_dbg

Belirtilen bir yığın bellek bloğunu genişletme ya da engelleme (yalnızca hata ayıklama sürümü) milletlerarası yeniden boyutlandırır.

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

Parametreler

  • userData
    Daha önce 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 genişletme işlemi veya NULL.

  • linenumber
    Genişletme işlemi burada istendi kaynak dosyadaki satır 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ı, _expand_dbg yeniden boyutlandırılan bellek bloğu için bir işaretçi döndürür. Bellek taşınmaz çünkü adresi userData aynıdır. Bir hata oluştu veya blok istenen boyuta genişletilemedi, sayı NULL. Bir hata oluşursa, errno hata ile işletim sisteminden yapısıyla ilgili bilgilerdir. errno hakkında daha fazla bilgi için, bkz. errno, _doserrno, _sys_errlist ve _sys_nerr.

Notlar

_expand_dbg İşlevidir _ hata ayıklama sürümünügenişletme işlevi. Zaman _debug tanımlı değil, her çağrı için _expand_dbg çağrısı nedeniyle sınırlı _expand. Her ikisi de _expand ve _expand_dbg temel Öbek bellek bloğunda yeniden boyutlandırma ama _expand_dbg birkaç hata ayıklama özelliği bulunur: arabellekleri her iki tarafına sızıntıları, belirli ayırma türleri, 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ğu yeniden boyutlandırır newSize. newSizebüyük ya da başlangıçta ayrılan bellek bloğu boyutundan küçük 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 üstbilgi bilgileri sağlamak ve arabellek üzerine yazmak için kullanılır. Yeniden boyutlandırma genişletme veya özgün bellek bloğu milletlerarası gerçekleştirilir. _expand_dbgbellek bloğu gibi taşınmaz _realloc_dbg işlevi.

Zaman newSize değerinden özgün blok boyutu, bellek bloğu genişletilir. Bellek bloğu istenen boyuta barındıracak şekilde genişletilemez, bir genişleme sırasında NULL döndürülür. Zaman newSize yeni boyut alınana kadar özgün blok boyutu, bellek bloğu sözleşme yapılan daha azdır.

Nasıl bellek bloklarını tahsis başlatıldı ve yönetilen temel yığın hata ayıklama sürümü hakkında daha fazla bilgi için bkz: bellek yönetimi ve hata ayıklama öbek. Ayırma blok türleri ve nasıl kullanılacakları hakkında daha fazla bilgi için bkz: Türler bloklar hata ayıklama öbek üzerindeki. Bir uygulama hata ayıklama yapısında 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: hata ayıklama sürümü Versus Base sürümü kullanarak.

Bu işlev parametreleri doğrular. memblock Bir null işaretçi veya boyutu büyükse _HEAP_MAXREQ, açıklandığı gibi bir geçersiz parametre işleyicisi bu işlevi çağırır Parametre doğrulama. Yürütülmesine devam etmek için izin verilip verilmediğini errno ayarlamak EINVAL işlevini verir ve NULL.

Gereksinimler

Yordamı

Gerekli başlık

_expand_dbg

<crtdbg.h>

Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.

Kitaplıkları

Hata ayıklama sürümlerini c çalışma zamanı kitaplıkları yalnızca.

Ö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 bağlıdır. Tüm bölümler genişletilmiş ise, çıktıyı Çıktı bölümünde yansıtılır.

.NET Framework Eşdeğeri

Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.

Ayrıca bkz.

Başvuru

Yordamlar hata ayıklama

_malloc_dbg