Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCL资源不足-代码行崩溃,此时还未到达_C++_Opencl - Fatal编程技术网

C++ OpenCL资源不足-代码行崩溃,此时还未到达

C++ OpenCL资源不足-代码行崩溃,此时还未到达,c++,opencl,C++,Opencl,我正在做一些OpenCL编程,在我的代码中的一个地方,我发现了一个奇怪的错误 a和a_端是指向本地内存的指针 if (a+POS<=a_end) { max = .... } else { max = *(a_end-1); } if(a+POS很有可能发生以下情况:在if之前,a\u end的值已损坏,很可能被初始化为0(在不进一步了解代码的情况下,这是我的最佳选择,但也可能是小于a+POS的值)然后执行else分支,该分支尝试取消引用在address0-1中找到的值,

我正在做一些OpenCL编程,在我的代码中的一个地方,我发现了一个奇怪的错误

a和a_端是指向本地内存的指针

if (a+POS<=a_end) {
    max = ....
} else {
    max = *(a_end-1);
}

if(a+POS很有可能发生以下情况:在
if
之前,
a\u end
的值已损坏,很可能被初始化为0(在不进一步了解代码的情况下,这是我的最佳选择,但也可能是小于
a+POS
的值)然后执行else分支,该分支尝试取消引用在address
0-1
中找到的值,这是一个相当大的数字,然后应用程序崩溃。显然,如果删除else分支,则不会执行此代码


提示:为a_end的值打印一些输出。

这里是我在if/else之前的输出:a:3298304 a_end:3311264 POS:34好的,它们看起来不错……在这种情况下,你能在if之前/之后再分享一点代码吗?这里很难找到错误?Thxok:)s_max和a_end的类型是什么。我想它们是某种指向某物的指针。它们指向同一类型的元素吗?a_端点指向a的最后一个元素之后的位置。s_maxes存储不同的最大值,用于比较列表元素并根据数据执行操作。我做了几个测试,在我的示例中,程序肯定不会通过这行代码。因此,如果该行是程序的一部分,程序就会崩溃,这真的很奇怪。你调试过它吗?你确定该行没有被执行吗?无论如何,这里的信息太少了。如何进一步使用max将是一个良好的开端。
border=b-b_end; //TODO: Check if all dummy elements are removed in this case
if(POS1<border && a+POS1<a_end) {
    s_data[POS1+s_maxes[2]-border+1]=a[POS1];
    s_ids[POS1+s_maxes[2]-border+1] = a_pos+POS1;
}

if(POS1+1==border) {
    debug[0] = a+POS1;
    debug[1] = a_end;
    s_maxes[1]=*(b_end-1);

    if(a+POS1<=a_end) {
        s_maxes[0]=s_data[s_maxes[2]];
    } else {
        s_maxes[0]=*(a_end-1); //Here is the line where it crashes
    }
}
if(POS2<border && a+POS2<a_end) {
    s_data[POS2+s_maxes[2]-border+1]=a[POS2];
    a_pos+POS2;
}
if(POS2+1==border) {
    s_maxes[1]=*(b_end-1);
    if(a+POS2<=a_end) {
        s_maxes[0]=s_data[s_maxes[2]];
    } else {
        s_maxes[0]=*(a_end-1);
    }
}
a+=border;a_pos+=border;