双重释放或损坏(输出)-C ++

时间:2018-10-05 10:42:23

标签: c++ cuda

我正在尝试在CUDA中使用最小值,最大值,总和和平均值实现并行减少。

这是我目前的主要代码段。

GC.Collect();

这是我的SUM CUDA内核:

int main()
{
    const auto count = 8;
    const int size = count * sizeof(int);
    int h[] = {13, 27, 15, 14, 33, 2, 24, 6};

    int* d;
    int choice = 0;
    do{
        cout <<"\n ---MENU--- \n";
        cout <<"1. Find Sum of Numbers in Array\n";
        cout <<"2. Find Max of Array\n";
        cout <<"3. Find Min of Array\n";
        cout <<"4. Find Average of Array\n";
        cout <<"5. Exit\n";
        cout <<"Enter your Choice : ";
        cin >> choice;
        switch(choice){
            case 1:
                cudaMalloc(&d, size);
                cudaMemcpy(d, h, size, cudaMemcpyHostToDevice);

                sum <<<1, count / 2 >>>(d);

                int result;
                cudaMemcpy(&result, d, sizeof(int), cudaMemcpyDeviceToHost);

                cout << "Sum is " << result << endl;

                getchar();

                cudaFree(d);
                delete[] h;
                break;
            case 5:
                break;
            default:
                cout<<"Wrong Input!! Try Again!";
                break;
        }
    }while(choice != 5);
return 0;
}

在运行程序时,我将其显示为OUTPUT:

enter image description here

如何解决此问题?请帮我。

1 个答案:

答案 0 :(得分:2)

不要忽略编译器警告。您正在非动态分配的数组上调用delete[]。这是未定义的行为,可能是导致核心转储的原因。

您无需为堆栈中的数组调用delete[]