2017-03-07 160 views
1

我正在寫一個2d矩陣程序。訪問衝突寫矩陣

的分配

要求:

Implement the following functions: 
float *allocate(int rows, int cols); 
void readm(float *matrix, int rows, int cols); 
void writem(float *matrix, int rows, int cols); 
void mulmatrix(float *matrix1, int rows1, int cols1, float *matrix2, int cols2, float *product); 

我的代碼(部分在主刪除,只創建並調用分配)

int main() { 
float * matrix1; 
float * matrix2; 
matrix1 = allocate(rows1,cols1); 
matrix2 = allocate(rows2,cols2); 
} 

float *allocate(int rows, int cols) { 
    float ** matrix = new float *[rows * cols]; 
    return *matrix; 
}//end allocate 

void writem(float *matrix, int rows, int cols) { 
    for (int x = 0; x < rows; x++) { 
     for (int y = 0; y < cols; y++) { 
      cout << "enter contents of element at " << (x + 1) << ", " << (y + 1) << " "; 
      cin >> matrix[x*rows + cols]; 
     } 
    } 
}//end writem 

我得到一個錯誤

拋出異常在lab5.exe 0x0FECF6B6(msvcp140d.dll):0xC0000005:訪問衝突寫入位置0xCDCDCDD5。如果有這種異常的處理程序,程序可能會安全地繼續。

它發生在行cin >>矩陣[x * rows + cols];

+2

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+2

該錯誤指示您取消引用未初始化的指針。 –

+0

同意這是一個未初始化的堆指針:http://stackoverflow.com/questions/127386/in-visual-studio-c-what-are-the-memory-allocation-representations/127404#127404 – drescherjm

回答

2

首先你錯過了指數。 應 cin >> matrix[x*rows + y]; 而不是 cin >> matrix[x*rows + cols];

其次,爲什麼你要創建的float *而不只是float矩陣?

float *allocate(int rows, int cols) { 
    float* matrix = new float[rows * cols]; 
    return matrix; 
}//end allocate