2015-04-25 73 views
0

首先說,這是一個重複的問題,但不是相同的問題。
當我運行我的代碼時,顯示此消息,但沒有錯誤。調試斷言失敗與rgbConverted.cpp

Error

#pragma once 
using namespace System::Drawing; 

ref class rgbConvert 
{ 
private: 
    System::Drawing::Bitmap^ grayImage; 
    System::Drawing::Bitmap^ bainaryImage; 
    System::Drawing::Bitmap^ rgbImage; 
    int xsize; 
    int ysize; 
    bool **BArray; 
    int **GrayArray; 
    int **binary; 
    FILE *fp; 

static float coef01 = (float)0.2989; 
static float coef02 = (float)0.5870; 
static float coef03 = (float)0.1140; 

public: 

rgbConvert(System::Drawing::Bitmap^ im) 
{ 
    rgbImage = im; 
    xsize = rgbImage->Height; 
    ysize = rgbImage->Width; 
} 

rgbConvert(int height, int width) 
{ 
    xsize = height; 
    ysize = width; 
} 

int** getGrayImageArray() 
{ 
    GrayArray = new int * [xsize]; 
    for (int i = 0; i < xsize; i++) 
    { 
     GrayArray[i] = new int[ysize]; 
    } 

    for(int i = 0; i < this->xsize; i++) 
    { 
     for (int j = 0; j < this->ysize; j++) 
     { 
      System::Drawing::Color^ clr = this->rgbImage->GetPixel(j, i); 
      int pixel = clr->ToArgb();    

      //int alpha = (pixel >> 24) & 0xff;// no need here 
      int red = (pixel >> 16) & 0xff; 
      int green = (pixel >> 8) & 0xff; 
      int blue = (pixel  ) & 0xff; 

      int grayC = int(coef01*red + coef02*green + coef03*blue); 

      GrayArray[i][j] = grayC; 
     }// inner for*/ 
    } 

    return GrayArray; 
} 

void getGrayImageArray (int** gArray) 
{ 
    this->GrayArray = gArray; 
} 

bool** GetBinaryArray(int level) 
{ 
    BArray = new bool * [xsize]; 
    for (int i = 0; i < xsize; i++) 
    { 
     BArray[i] = new bool[ysize]; 
    } 

    binary = new int * [xsize]; 
    for (int i = 0; i < xsize; i++) 
    { 
     binary[i] = new int[ysize]; 
    } 
    fp=fopen("C:\\binary.txt","w"); 

    int grayC; 

    for (int xVal = 0; xVal < xsize; xVal++) 
    { 
     for(int yVal = 0; yVal < ysize; yVal++) 
     { 
      grayC = GrayArray[xVal][yVal]; 

      if (grayC >= level) 
      { 
       BArray[xVal][yVal] = true; 
       binary[xVal][yVal] = 1; 
       fprintf(fp,"%d",binary[xVal][yVal]); 
      } 
      else 
      { 
       BArray[xVal][yVal] = false; 
       binary[xVal][yVal] = 0; 
       fprintf(fp,"%d",binary[xVal][yVal]); 
      } 

     }// inner for*/ 
    } 
    fclose(fp); 
    return BArray; 
} 
}; 

當我按下重試,則斷點表示此行。

fprintf(fp,"%d",binary[xVal][yVal]); 

如果我刪除這些行,然後在主程序中顯示斷點。

int main(array<System::String ^> ^args) 
{ 
    // Enabling Windows XP visual effects before any controls are created 
    Application::EnableVisualStyles(); 
    Application::SetCompatibleTextRenderingDefault(false); 

    // Create the main window and run it 
    Application::Run(gcnew Form1()); 
    return 0; 
} 

斷點顯示在return 0此行。

+0

有文件被成功打開?您確實需要檢查可能失敗的函數中的錯誤。 –

+0

先生,我的程序運行時沒有任何錯誤。但out.doc文件沒有創建。 –

+0

如果程序運行沒有錯誤,那麼你的崩潰是什麼?你是否在問崩潰(可能是因爲文件沒有打開),或者文件沒有​​被創建(這可能是因爲同樣的原因)?檢查一下'fopen'回來了! –

回答

0

其實這是一個衆所周知的問題。我已經解決了這個問題。在我的代碼中,我創建了C盤中的文本文件,docx文件和圖像。但是沒有權限訪問我的電腦中的C盤。 後來我就按照這個解決步驟:

  1. 如果可以訪問CMD,您可以在 VISTA/Windows 7中使用以下命令重置安全設置:「SECEDIT /配置/ CFG %WINDIR% \ inf \ defltbase.inf/db defltbase.sdb/verbose「(不含引號)。 要查看此命令的作用,請轉至此處:如何將安全 設置恢復爲默認設置?

    注意:如果您在登錄時無法訪問cmd,請使用本指南 系統恢復選項。當您訪問系統恢復選項屏幕時,您可以到達命令行。

  2. 這個命令似乎給所有權問題踢了一個 背面,儘管看起來沒有什麼變化。前往資源管理器, 右鍵單擊C:並轉到屬性。

  3. 轉到安全選項卡,然後選擇高級。

  4. 轉到所有者選項卡。現在你應該可以點擊編輯。

  5. 如果您在列表中沒有管理員,那麼它會顯示 「將所有者更改爲:」,然後轉到「其他用戶或組」。如果是這樣,直接跳到 到步驟7.

  6. 在其他用戶或組鍵入 底部框中的「管理員」(不含引號)。點擊檢查名稱,然後確定。

  7. 單擊管理員,然後確定。你現在已經給了你自己 C :!的所有權。 (只要您的帳戶是一個管理員,即 是。)

  8. 單擊確定的「高級安全設置...」窗口取回 的屬性窗口。您現在應該擁有 權限等列表,在此之前您只有一些關於如何 無法查看權限的信息。進步,呃?

  9. 您可能需要在Adminstrators組中添加以編輯其 權限。爲此,請單擊「編輯」,然後單擊「添加」,然後在底部框中鍵入 「管理員」(不含引號)。然後點擊檢查名稱 ,然後確定。

  10. 單擊列表中的管理員,並勾選「完全控制」旁邊的允許 列中的複選框。

  11. 單擊應用,您可能會收到一堆有關如何將 這不能應用於某些文件和文件夾的錯誤消息。只要通過 他們全部。一旦完成,您應該可以訪問您的C:驅動器,一次更多 !

Source Link