我编写了一个C ++代码,面对两个
首先,当我使用两个不同的编译器(Visual C ++和g ++)编译以下代码时,它们为H[][]
矩阵创建了不同的输出。
VC ++结果是正确的,g ++生成的H矩阵的结果是错误的。我在cygwin中使用g++ -O -o output myfile.cpp
。
我逐行检查了我的代码,但我找不到原因。
其次,当我为x
和t
数组(例如30)分配大数字时,我的代码遇到错误。
答案 0 :(得分:7)
全局变量,例如:
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];