这是我的代码。当我运行一些时候它打印" 1.5969"像我期待的那样。大约三分之一的时间它说.exe文件已经停止工作,并且" windows正在寻找解决方案"类型错误。如果我不调用test(),它会100%的时间工作。如果我在test()之后省略了所有代码,但是保持对test()的调用,它会100%地工作。当代码编写时,它大约有三分之一的时间。这是为什么?
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int test(int* b, int* c){
++*c;
b[6] = 3;
return b[6];
}
int main(){
int* a;
int c = 1;
int* d = &c;
a = new int[5];
test(a, d);
char a_[] = "1.5969 1.68 1.88";
char* pEnd;
double d1;
d1 = strtod(a_,&pEnd);
cout << d1;
return 0;
}
答案 0 :(得分:1)
test()
中的数组索引超出范围。分配的最大空间为5 int
,但访问第7个数字。这导致未定义的行为。确保b
中的test()
索引在0到4之间。
答案 1 :(得分:1)
您可以访问其他界限。 a = new int[5];
分配5个数组元素。但b[6]
访问数组的第7个元素。像这样调整你的代码:
int test(int* b, int* c){
++*c;
b[6] = 3;
return b[6];
}
int main(){
int* a;
int c = 1;
int* d = &c;
a = new int[7];
// ^
test(a, d);
char a_[] = "1.5969 1.68 1.88";
char *pEnd;
double d1;
d1 = strtod(a_,&pEnd);
cout << d1;
return 0;
}