C++ cli 使用rgbConverted.cpp调试断言失败
首先,这是一个重复的问题,但不是同一个问题。 当我运行代码时,会显示此消息,但没有错误C++ cli 使用rgbConverted.cpp调试断言失败,c++-cli,C++ Cli,首先,这是一个重复的问题,但不是同一个问题。 当我运行代码时,会显示此消息,但没有错误 #pragma once using namespace System::Drawing; ref class rgbConvert { private: System::Drawing::Bitmap^ grayImage; System::Drawing::Bitmap^ bainaryImage; System::Drawing::Bitmap^ rgbImage;
#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;
}
};
若我删除这些行,那个么在主程序中显示断点
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;
}
断点在返回0中显示这一行。实际上这是一个众所周知的问题。我已经解决了这个问题。在我的代码中,我在C驱动器中创建了文本文件、docx文件和图像。但是在我的计算机上没有访问C驱动器的权限。
fprintf(fp,"%d",binary[xVal][yVal]);
然后我通过以下步骤解决了这个问题:
如果可以访问cmd,则可以在中重置安全设置
Vista/Windows 7,使用以下命令:secedit/configure/cfg
%windir%\inf\defltbase.inf/db defltbase.sdb/verbose无引号。
要查看此命令的作用,请转到此处:如何恢复安全性
设置为默认设置
注意:如果登录时无法访问cmd,请使用本指南
系统恢复选项。您可以在
访问系统恢复选项屏幕
这个命令似乎给了所有权问题一个机会
背面,尽管看起来什么都没有改变。去探险家那里,
右键单击C:并转到属性
转到“安全”选项卡,然后转到“高级”
转到“所有者”选项卡。现在您应该可以单击“编辑”
如果列表中没有管理员
将所有者更改为:然后转到其他用户或组。如果你这样做了,就去吧
直接进入第7步
在其他用户或组上键入Administrators在中不加引号
底部的盒子。单击“检查名称”,然后单击“确定”
单击Administrators,然后单击OK。你现在给了你自己
C:的所有权!只要您的帐户是管理员,那么
是
单击高级安全设置上的确定。。。返回窗口
转到“属性”窗口。您现在应该有一个
权限等等,你以前只知道怎么做
您无法查看权限。进步,嗯
您可能需要添加Adminstrators组来编辑其
权限。要执行此操作,请单击“编辑”,然后单击“添加”并键入
管理员在底部框中没有引号。然后点击支票名称
然后就好了
单击列表中的Administrators并勾选Allow(允许)框中的复选框
完全控件旁边的列
单击Apply,您可能会收到一堆关于如何应用的错误消息
这无法应用于某些文件和文件夹。一切顺利
他们都是。完成后,您应该可以访问C:驱动器一次
更多
文件是否已成功打开?您确实需要检查可能失败的函数是否有错误。先生,我的程序运行时没有任何错误。但是out.doc文件没有创建。如果程序运行时没有错误,那么您的崩溃是什么?您是在询问崩溃,原因可能是文件未打开,还是文件未创建,原因可能相同?检查什么是fopen返回!先生,实际上,当我想创建文档文件时,它正在崩溃。但当我删除这些行时,它们正在创建文件或在文档中打印,然后崩溃,断点转到主程序。但主程序并没有这样的中断线。我在我的帖子中也展示了main。