[問題] 有時候記憶體會找不到位置

作者: watermeter (水表)   2016-07-01 15:27:34
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Xcode
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
std
問題(Question):
我的問題在於,呼叫printmatrix函式時,有時候記憶體會無法讀到位置,有時候卻可以
找到並執行,但明明Input都是一模一樣的,只需要告訴我原因即可,謝謝
餵入的資料(Input):
一樣的矩陣跟資料輸入數次,卻是不同的結果
2
2 3
4 5
3 5
6 8
預期的正確結果(Expected Output):
A =
2 3
4 5
B =
3 5
6 8
A+B =
5 8
10 13
A-B =
-1 -2
-2 -3
A*B =
24 34
42 60
(這是有時候跑出來的執行結果,有時候卻跑不出來)
錯誤結果(Wrong Output):
有時候跑不出來,我完全沒頭緒@@
程式碼(Code):(請善用置底文網頁, 記得排版)
//
// Matrix.h
// L4 HW
//
// Created by 葉柏宏 on 2016/7/1.
// Copyright 2016年 Dannel Apple. All rights reserved.
//
#ifndef Matrix_h
#define Matrix_h
template<class _Tx>
void swap(_Tx &a, _Tx &b) {
_Tx t = a;
a = b;
b = t;
}
class Matrix{
size_t n;
double *mtxptr=new double;//a obj with algo idx
public:
void assignDimension(int dim){
this->n=dim;
}
void assignElements(){
for(size_t i=0;i<(n*n);i++) cin>>*(mtxptr+i);
}
void printMatrix(){
for(size_t i=0;i<n*n;i++){
if(i%n==0) cout<<"\n";
std::cout<<*(mtxptr+i)<<" ";
}
std::cout<<std::endl;
}
void assignMatrix(Matrix A){
this->n=A.n;
for(size_t i=0;i<n*n;i++) *((this->mtxptr)+i)=*((A.mtxptr)+i);
}
void transposeMatrix(){
for(size_t i=0;i<n*n;i++)if((i%n)>(i/n)) swap(*((this->mtxptr)+i), *((this->mtxptr)+(i%n)*n+i/n));}
void addMatrix(Matrix A,Matrix B){setzero();
for(size_t i=0;i<n*n;i++) *(mtxptr+i)=*(A.mtxptr+i)+*(B.mtxptr+i);
}
void subtractMatrix(Matrix A,Matrix B){setzero();
for(size_t i=0;i<n*n;i++) *(mtxptr+i)=*(A.mtxptr+i)-*(B.mtxptr+i);
}
void multiplyMatrix(Matrix A,Matrix B){setzero();
for(size_t i=0;i<n*n;i++){
for(size_t j=0;j<n;j++){
*((this->mtxptr)+i)+=*((A.mtxptr)+i/n*n+j)**((B.mtxptr)+n*j+i%n);
}
}
}
void setzero(){
for(size_t i=0;i<n*n;i++) *((this->mtxptr)+i)=0;
}
};
#endif /* Matrix_h */
補充說明(Supplement):
作者: watermeter (水表)   2016-07-01 15:28:00
我使用了一些矩陣的性質
作者: druid0214 (Assassin)   2016-07-01 15:54:00
先把你的語法整理 連cin都沒有std::還有你的main.cpp也要放上來才知道是哪個函式的問題很想噓可能我C++沒學好 那個swap好像怪怪的程序導向和物件導向不要混在一起 不好閱讀不好意思剛剛才看懂原來是自己寫一個swapinclude了哪些東西也放上來一下 不是每個編譯器都預設
作者: bibo9901 (function(){})()   2016-07-01 16:18:00
你的mtxptr只給了1個 double 空間?
作者: watermeter (水表)   2016-07-02 11:34:00
謝謝各位的指教,如果使用pointer的話,會有什麼問題
作者: druid0214 (Assassin)   2016-07-02 13:13:00
所以你堅持要放我Compiler不能過的程式碼?
作者: steve1012 (steve)   2016-07-03 00:24:00
什麼意思是程序導向跟物件導向放一起 看不太懂你只new 一個double 嗎還是我漏掉了 陣列應該是new double [x]吧
作者: druid0214 (Assassin)   2016-07-03 06:08:00
1.assign很明顯是物件導向 卻沒有建構解構2.add sub這種明顯是程序導向 丟在class裡很怪要怎麼用? 大概就是A.sub(A,B) 這樣很怪3.很帥氣的說函式庫用std 一開場宣告Template我還以為要用樣板做matrix運算 結果是自定義swap這三點都沒關係 我是很度爛語法有錯 程式碼那麼長不使用網頁存就算 複製貼上到IDE就有紅點cpp也不貼上來 這種一丟上來開IDE debugger比較快

Links booklink

Contact Us: admin [ a t ] ucptt.com