作者e1090128 (肥龟)
看板C_and_CPP
标题[问题] C++尝试读取或写入受保护的记忆体
时间Fri Mar 24 15:09:35 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
NO
问题(Question):
当我在使用指标写入资料时,出现了尝试读取或写入受保护的记忆体。
这通常表示其他记忆体已损毁。这个Exception
喂入的资料(Input):
NO
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
Bitmap^ openImg;
openImg=gcnew Bitmap(pictureBox1->Image);
Bitmap^ temp=gcnew Bitmap(openImg ->Width,openImg->Height);
String^ M=textBox4->Text;
int m, r, y, tem=0;
int *cub;
if(String::IsNullOrEmpty(M))
m=0;
else
m=System::Convert::ToInt32(M);
int masksize=m*m;
int u=m/2;
if(m%2 != 0){
for(int i=u;i<temp->Height-u;i++){
for(int j=u;j<temp->Width-u;j++){
cub=new int[masksize];
r=0;
y=0;
for(int z=0;z<m^2;z++){
Color RGB=openImg->GetPixel(j-u+r,i-u+y);
*(cub+z)=RGB.B; //出错於这行
r++;
if(r == m){
r=0;
y++;
}
}
for(int k=0;k<m;k++){
for(int q=0;q<8;q++){
if(*(cub+q) > *(cub+(q+1))){
tem=*(cub+(q+1));
*(cub+(q+1))=*(cub+q);
*(cub+q)=tem;
}
}
}
int sommedian=*(cub+(m^2/2));
delete [] cub;
temp->SetPixel(j,i,Color::FromArgb(sommedian,sommedian,sommedian));
}
pictureBox2->Image=temp;
}
}
补充说明(Supplement):
请问这是哪里出错? 需要怎麽解决
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.116.234.231
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1490339377.A.4F1.html
1F:→ achicn3: 诶可以用m^2哦? 好奇一问 03/24 15:40
2F:→ uranusjr: ^ 是 XOR 运算子啊 03/24 15:41
3F:→ steve1012: 不format一下真的很难读啊 03/24 15:45
4F:→ steve1012: 何不print z看看你有没有超界? 感觉就是超界了 03/24 15:47
5F:→ steve1012: 话说你indent也太多层了 不考虑多写一个function吗XD 03/24 15:48
6F:→ steve1012: 然後自己写一个swap function 03/24 15:49
7F:→ achicn3: 对吼感谢解释 我以为他是要m*m...没看太仔细 03/24 15:58
8F:推 LPH66: 呃, 我看下来的感觉原 PO 似乎就是要 m*m... 03/24 16:48
9F:→ LPH66: 这种地方 m^2 的结果应该没什麽用 03/24 16:48
10F:推 steve1012: XD 03/24 23:32
11F:推 a34021501: 不同版本的Win10可能有不同结果! 03/25 03:56
12F:推 Bencrie: 楼上你不要来害人 03/25 22:30