C ++在运行时崩溃但只有部分时间崩溃

时间:2016-01-13 08:12:12

标签: c++ pointers reference crash

这是我的代码。当我运行一些时候它打印" 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;
}

2 个答案:

答案 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;
}