使用free()或delete时访问冲突

时间:2017-07-16 06:28:05

标签: c++ cuda

当在__global__ Cuda中时,我想永久地从内存中清除变量访问冲突。样品:

    for (uint i = 0; i < 4294967295; i++)
{
    int len = count_numbers(i);
    char * iStr = new char[len]();
    auto iChar = to_str(iStr, i);

    uint p1, p2, p3, p4;
    get_md5(iChar, len, &p1, &p2, &p3, &p4);

    if (myhashp1 == p1 && myhashp2 == p2 && myhashp3 == p3 && myhashp4 == p4)
    {
        printf("good!");
        printf(" i=");
        printf("%d", i);
        printf("\n");
        bool good = true;
        break;
    }
    else
    {
        bool good = false;
    }


    delete (&iChar);
    delete (&iStr);
}
  

CUDA Memory Checker检测到1个线程导致访问冲突。

1 个答案:

答案 0 :(得分:1)

您正在使用new的阵列版本:

char * iStr = new char[len]();

所以你需要删除数组版本:

delete[] iChar;

我假设to_str()在填写后只返回相同的指针,所以不要删除它,你将删除两次相同的东西。