2009-02-07 29 views
0

我想使用GDI +位圖類將IStream轉換爲HBITMAP。 IStream對象正在使用來自Web服務的數據進行填充。我正在讀取部分數據並將其附加到稍後與Bitmap類一起使用的對象。在vC++中正確使用char數組

下面是代碼

 char data1[] = ""; 
     int offset = 0; 

     LPTSTR pszString = NULL; 
     LPSTREAM lpStream = NULL; 

     CreateStreamOnHGlobal(NULL, TRUE, &lpStream); 
     StreamStringCopy ((LPSTREAM)lpStream, (LPCTSTR)""); 
     while(of->pread(&data1,1023,offset) > 0){ 
      LPCTSTR tempStr = data1; 
      StreamStringCat ((LPSTREAM)lpStream, tempStr); 
      offset = offset + strlen(data1);  
     } 
     Bitmap bm(lpStream,FALSE); 
     bm.GetHBITMAP(Color.Black, &ret); 

StreamStringCat附加字符串到LPSTREAM對象,所以我可以得到一個單一LPSTREAM對象的相關部分。

循環僅在第一次運行良好。當再次輸入while循環時,數據1會給出訪問衝突異常。

有人可以告訴我應該如何解決這個問題。 謝謝。

回答

1

首先,小心字符串文字。像""這樣的字符串文字的類型是const char*,所以你不能寫信給他們。我並不完全確定你的構造char data1[] = ""是否可寫,但即使如此,你也只有2個字符的內存,而你(我想)試圖讀取1023字節到data1的位置。試試這個:

char* data1 = static_cast<char*> (std::malloc (1024 * sizeof (char)); 

... 

std::free (data1); 

// or try this 
char data1 [1024] = { 0 }; // Gives you 1024 bytes to write to on the stack 

這分配了一些可以寫入的內存。我想在第一次運行後,你已經覆蓋了一些內存,這導致了下一次運行中的訪問衝突。

相關問題