【问题标题】:Memory Dump error on runtime运行时内存转储错误
【发布时间】:2015-03-07 04:44:35
【问题描述】:

这段代码有什么问题?它在运行时显示内存转储错误

#include<iostream>
using namespace std ;
int main()
{
    int A[3][4] = {{3, 1, 8, 11}, {4, 12, 9, 10}, {7, 5, 2, 6}};
    int **p = A;
    P[1][2] = 99;
    cout<<A[1][2] ;
}

【问题讨论】:

  • int** 不是二维数组。其次,该代码不应该成功编译。 ideone.com/mKv3xv
  • int mian??这不可能是你的真实代码。
  • 肯定不能编译?即使您修复了main 的拼写,并更改了pP 中的一个以匹配另一个,也没有从int[3][4]int** 的有效转换。请发布您正在运行的实际代码。
  • 嘿,放轻松,他显然是个编程菜鸟
  • 对不起,手误!它应该是 -int main 。是的,我刚开始 C++。我开始知道二维数组实际上是一个指针数组,它的每个元素都指向一个一维数组。这就是我使用 **p 的原因。不管怎样,谢谢大家

标签: c++ memory-dump


【解决方案1】:

将您的 int **p = A[0][0] 更改为 int *p = &amp;A[0][0]。在下一行中,编写以下 *p = *((int*)p + 1 * NUM_OF_COLUMNS + 2) = 99;,其中 NUM_OF_COLUMNS 是数字 4,而不是 P[1][2] = 99;。更正主要的拼写以及变量的大写/小写。还要在末尾添加一个return 0;,因为你有一个int main(),而不是一个void。

【讨论】:

  • main 函数不需要返回值。这是一个“特殊”函数,如果没有指定返回值,它将返回 0。不管怎样,不管是int main(),即使没有返回值。
  • @PaulMcKenzie 你当然完全正确。但是假设他或她不是在 70 年代的古老 UNIX 机器上编码,那很好,否则可能会产生不确定的后果 :)
【解决方案2】:

您似乎是 C++ 新手或遇到类似问题的编程不会感觉不好,因为指针可能很棘手,如果您不知道您不知道。我很确定这会对你有所帮助。记得选择最佳答案:)。

 #include <iostream>
    using namespace std;
    int main() {
        int A[3][4] = { { 3, 1, 8, 11 }, { 4, 12, 9, 10 }, { 7, 5, 2, 6 } };
        cout << "Before pointer change A[1][2] = " << A[1][2] << endl;

        int *p;       //Set pointer 
        p = &A[1][2]; //Set memory address to pointer don't forget '&'
        *p = 99;      //Change integer

        cout << "After pointer change  A[1][2] = " << A[1][2] << endl;

        return 0; // you need a 'return 0;' because your main is int
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多