【发布时间】:2021-05-28 09:20:36
【问题描述】:
我一直在玩指针,我遇到了我的进程在使用传统窗口“没有响应”和退出代码 -1073741819 (0xC0000005) 完成后终止。
我的 IDE 建议的快速修复是使用 __p__fmode() 初始化 *ptr。
但是我读到,“__p__fmode 函数仅供内部使用,不应从用户代码中调用。”
如果你愿意帮我解决这个问题,请:)
#include <iostream>
using namespace std;
// Code written in Jetbrains's CLion with mingw-w64 compiler
int main() {
int r, c, *ptr = __p__fmode(); // No idea what's that __p__fmode(), but without it process terminates
// with code "Process finished with exit code -1073741819 (0xC0000005)"
cout<<"Enter number of rows for Matrix A:";
cin>> r;
cout<<"Enter number of columns for Matrix A:";
cin>> c;
int A[r][c];
A[0][0] = 0;
A[0][1] = 1;
A[1][0] = 2;
*ptr = A[0][0];
cout<<*(*(A+0)+0)<<"\t";
cout<<*(*(A+0)+1)<<"\t";
cout<<*(*(A+1)+0)<<"\t";
}
【问题讨论】:
-
这个建议是无稽之谈,你应该忽略它。您需要
ptr指向一些您可以实际写入的内存,例如ptr = new int;。无论如何,它的目的是什么? -
我被要求以涉及指针的方式填充二维矩阵。有点想自己弄清楚,但是嘿,它可以指向新的 int :) 谢谢
-
作业可能要求您将non-Standard code、
int A[r][c];的这一点替换为此处描述的内容:How do I declare a 2d array in C++ using new? 请注意,在实际编程中制作二维数组像这样可能会让你受到同龄人的嘲笑。使用std::vector,最好使用单个vector,即made to look like it is multi-dimensional。 -
注意:
*ptr = A[0][0];很可能是程序崩溃的地方。如果ptr没有指向任何东西,您就不能安全地取消引用指针*ptr,并分配给指针处的变量。该程序现在不会崩溃,因为*ptr = __p__fmode();指向ptr某物,但它不是您想要覆盖的东西。重读教科书中关于指针使用的部分,刷新你对指针的理解。目前,您似乎手足无措,对基础知识掌握得太少,无法避免抓住错误的解决方案。 -
顺便问一下,你用的是什么IDE?我很想知道如何得出这样一个快速修复建议是合适的结论。
标签: c++ arrays pointers matrix multidimensional-array