为什么Visual C ++和g ++为我的程序提供不同的输出?

时间:2015-10-16 19:30:48

标签: c++

我编写了一个C ++代码,面对两个

首先,当我使用两个不同的编译器(Visual C ++和g ++)编译以下代码时,它们为H[][]矩阵创建了不同的输出。

VC ++结果是正确的,g ++生成的H矩阵的结果是错误的。我在cygwin中使用g++ -O -o output myfile.cpp

我逐行检查了我的代码,但我找不到原因。

其次,当我为xt数组(例如30)分配大数字时,我的代码遇到错误。

1 个答案:

答案 0 :(得分:7)

全局变量,例如:

int n, m, beta;

初始化为零。然后,使用它们的值分配内存:

char *t = new char[n];
char *x = new char[m];

稍后您阅读了nm,但认为可以访问tx,就好像它们的大小与n的新值相对应m。您最有可能最终访问超出范围的内存。

这是未定义的行为。

您需要的是将tx初始化为nullptr,并在main

中为他们分配内存
char *t = nullptr;
char *x = nullptr;

int main()
{
    cout << "Enter n (size of t);" << endl;
    cin >> n;

    cout << "Enter m (size of x):" << endl;
    cin >> m;

    // Allocate memory for t and x.
    t = new char[n];
    x = new char[m];