查看完整版本: C++其他資訊: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。
頁: [1]

ericwu830701 發表於 2017-3-24 03:17 PM

C++其他資訊: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。

如題,小弟在寫指標的時候,再輸入指標的值的時候發現會出現[其他資訊: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。]這個例外,請問各位大大要怎麼解決
以下是我的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;
                                                 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;
                                 }
                         }

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

o_g349 發表於 2017-9-13 12:40 PM

你的 z 過大,大到超過 masksize,導致記憶體存取出界,這是因為你的 z<m^2 判斷是錯的,「^」這個運算子做的不是指數,而是 xor,要改的話也要改成 z<m*m
頁: [1]