2014-11-05 65 views
1

MSVS 2010,Windows 7運行時檢查失敗#2,同時使用API​​保存圖像幀

我正在使用API​​訪問攝像頭功能。

以下函數顯示一個幀並保存它。

void DisplayThread::OnBufferDisplay(PvBuffer *aBuffer) 
{ 

     mDisplayWnd->Display(*aBuffer); //displaying frame 


//Now let us try to save the frame with name of the form %Y%m%d%H%M%S.bmp 

    system("mkdir D:\\ABCD"); 
      struct tm *tm; 
      int count; 
     time_t t; 
     char str_time[20]; 
     t = time(NULL); 
     tm = localtime(&t); 
     strftime(str_time, sizeof(str_time), "%Y%m%d%H%M%S.bmp", tm); //name of the frame 
      char name[1000]; //sufficient space 
     sprintf(name,"%s",str_time); 
      char path[]="D:\\ABCD"; 
      strcat(path,name); //path =path+"\\"+name; 
     // char* str=(char*)(void*)Marshal::StringToHGlobalAnsi(path); 
    PvString lFilename(path); 
         PvString lCompleteFileName(lFilename); 

PvBufferWriter lBufferWriter; //The following function saves image 
PvResult lResult = lBufferWriter.Store(aBuffer, lCompleteFileName, PvBufferFormatBMP); 


} 

被保存BMP文件的名稱是形式%Y%m%d%H%M%S.bmp

程序的構建完全正常的,甚至顯示正確的到來, 但下面的錯誤信息彈出:

enter image description here

它看起來像內存分配與變量'名稱'是錯誤的。

但我已經分配了足夠的空間,即使那樣我得到這個錯誤。

爲什麼會發生?

請讓我知道是否需要更多的信息來調試。

注意: lBufferWriter.Store()返回的值爲'OK'(表示緩衝區/幀寫入成功),但沒有保存文件。我想這是因爲我得到的運行時檢查失敗。

請幫忙。

+0

'path'是太小,只能容納7個字符(+ 0終結) – Mat 2014-11-05 06:00:38

+0

@Mat你可以請建議那麼,什麼是最好的實踐 ?我應該如何分配一個數組char路徑[1000]? – user3891236 2014-11-05 06:02:24

+0

您的緩衝區必須足夠大以容納您試圖放入其中的數據。如果你在Windows上,MAX_PATH通常足夠大,可以用於文件名。 – 2014-11-05 06:18:43

回答

1

您的路徑[]數組大小爲8,並且它太小而無法在串接後保存字符串。 由於此路徑變量位於堆棧上,因此會損壞堆棧。 因此,您的緩衝區應該足夠大以容納您要放入其中的數據。

在你的情況就行更改爲:

char path[1024]="D:\\ABCD"; 
相關問題