运行代码时出现以下错误:
KSU.CIS308.Project5.exe 中 0x00F66754 处的未处理异常:0xC0000005:访问冲突写入位置 0xFDFDFDFD。
我认为这是由于指针有内存,但也不是它指向的内容。我不知道如何分配它。这是代码,它是 Matrix 对象的构造方法:
Matrix::Matrix(int row, int col)
{
this->rows = row;
this->cols = col;
this->arr = new int*[row];
for (int i = 0; i < row; i++)
{
this->arr[i] = new int[col];
}
}
这this->arr = new int*[row];
就是扔它的东西。它是一个指向指针的指针,因此我可以像存储二维数组一样存储矩阵。任何帮助深表感谢。我认为它稍后也会被抛出,但如果我能找出一个,其余的也应该很容易修复。
Arr 在头文件中声明如下:
int **arr;
好的,所以在调试时我发现 col 正在传递 0 这可能解释了错误。 我以为我计算了通过它的正确值。这是主文件。我使用 strtok 将所有内容放入 Vector 中。用户输入格式为:“1 2 3 // 3 2 1” 其中“//”是换行符。
int main() {
vector<int> v1;
int rowCountA = 1;
int colCountA = 0;
cout << "Enter First Matrix (put // to denote row breaks): ";
char buff[200];
char *token;
char *tok;
scanf("%s", buff);
token = strtok(buff, "//");
while (token != NULL)
{
tok = strtok(token, " ");
while (tok != NULL)
{
v1.push_back(atoi(tok));
tok = strtok(NULL, " ");
colCountA++;
}
token = strtok(NULL, "//");
rowCountA++;
}
A = new Matrix(rowCountA, colCountA/(rowCountA+1));
for (int i = rowCountA; i > 0; i--)
{
for (int k = colCountA; k < 1; k--)
{
A->setElem(i, k, v1.back());
v1.pop_back();
}
}
}