2015-10-16 55 views
-3

我写了一个C++代码,并且面对两个不同的编译器(Visual C++和g ++)编译下面的代码,它们为H[][]矩阵创建不同的输出。为什么Visual C++和g ++为我的程序提供不同的输出?

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

我检查了我的代码行,但我找不到理由。第二,当我为xt数组(例如30)分配一个大数字时,我的代码遇到一个错误。

+1

为他们分配内存,你可能会有一个bug。请发布[mcve]。 –

回答

7

全局变量:

int n, m, beta; 

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

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

后来你读nm但假设tx可以像它们的大小对应的nm新的值进行访问。你很可能最终会超出范围访问内存。

这是未定义的行为。

你需要的是初始化txnullptrmain

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]; 
+1

同样适用于G和H. – drescherjm

+0

tnx R Sahu.You解决了我的第一个问题,VC++和g ++都创建了相同的输出。但是,当我给t和x分配一个大值(例如50)时,VC++会报告一些异常,如“访问冲突读取位置...”,并且无法创建exe文件。和g ++创建输出,但给出以下例外: – alijanavar

+0

tnx R Sahu.You解决了我的第一个问题,VC++和g ++都创建了相同的输出。但是,当我给t和x分配一个大值(例如50)时,VC++会报告一些异常,如“访问冲突读取位置...”,并且无法创建exe文件。和g ++创建输出,但会产生以下异常:“cygwin_exception :: open_stackdumpfile:将堆栈跟踪转储到output.exe.stackdump – alijanavar

相关问题