我写了一个C++代码,并且面对两个不同的编译器(Visual C++和g ++)编译下面的代码,它们为H[][]
矩阵创建不同的输出。为什么Visual C++和g ++为我的程序提供不同的输出?
VC++的结果是正确的,并且由g ++产生的H矩阵的结果是错误的。我在cygwin中使用g++ -O -o output myfile.cpp
。
我检查了我的代码行,但我找不到理由。第二,当我为x
和t
数组(例如30)分配一个大数字时,我的代码遇到一个错误。
我写了一个C++代码,并且面对两个不同的编译器(Visual C++和g ++)编译下面的代码,它们为H[][]
矩阵创建不同的输出。为什么Visual C++和g ++为我的程序提供不同的输出?
VC++的结果是正确的,并且由g ++产生的H矩阵的结果是错误的。我在cygwin中使用g++ -O -o output myfile.cpp
。
我检查了我的代码行,但我找不到理由。第二,当我为x
和t
数组(例如30)分配一个大数字时,我的代码遇到一个错误。
全局变量:
int n, m, beta;
初始化为零。然后,您可以使用它们的值分配内存:
char *t = new char[n];
char *x = new char[m];
后来你读n
和m
但假设t
和x
可以像它们的大小对应的n
和m
新的值进行访问。你很可能最终会超出范围访问内存。
这是未定义的行为。
你需要的是初始化t
和x
到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];
同样适用于G和H. – drescherjm
tnx R Sahu.You解决了我的第一个问题,VC++和g ++都创建了相同的输出。但是,当我给t和x分配一个大值(例如50)时,VC++会报告一些异常,如“访问冲突读取位置...”,并且无法创建exe文件。和g ++创建输出,但给出以下例外: – alijanavar
tnx R Sahu.You解决了我的第一个问题,VC++和g ++都创建了相同的输出。但是,当我给t和x分配一个大值(例如50)时,VC++会报告一些异常,如“访问冲突读取位置...”,并且无法创建exe文件。和g ++创建输出,但会产生以下异常:“cygwin_exception :: open_stackdumpfile:将堆栈跟踪转储到output.exe.stackdump – alijanavar
为他们分配内存,你可能会有一个bug。请发布[mcve]。 –