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];
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
該錯誤指示您取消引用未初始化的指針。 –
同意這是一個未初始化的堆指針:http://stackoverflow.com/questions/127386/in-visual-studio-c-what-are-the-memory-allocation-representations/127404#127404 – drescherjm