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