错误的指针可能是哪里出现问题了?

[attach]3312[/attach]
我就是这么几行代码怎么会报错?有可能是哪里出现了问题?

应该是cudaMalloc 没有申请成功。

看下 cudaMalloc 的返回值是否为cudaSuccess.

可能是 imageSIze太大,超出了显卡内存大小

我的显卡内存是1G的,我处理的图像是1920x1080的YUV数据,怎么会超出了显卡内存大小那?我一共才开辟了两个类似的buffer。

cudaMemcpy 的返回成功了吗

也有可能是vx 的问题,你把m_dst_devicemem2 再memcpy到host ,输出看下是否有正确的值

返回成功了,我发现我这地方是有的时候指针有值,有的时候指针没有值,奇了怪了。

cudaMalloc返回cudasucess,cudaMemcpy返回一个很大的负数,出现错误。

这个错误解决不了,后面的没法继续啊,着急啊。

你没有对m_dst_devicemem2 进行赋值,当然是一个随机数了

cudaMalloc 返回sucess,说明m_dst_devicemem2分配空间成功。
可以这样测试:
unsigned char* m_dst_devicemem2 ;

cudaMalloc( m_dst_devicemem2 ,pDst->imageSize);

kernel<<<1,1>>>(m_dst_devicemem2 ,10); // 对m_dst_devicemem2 赋值

unsigned char p[10];

cudaMemcpy(p, m_dst_devicemem2, 10, cudaMemcpyDeviceToHost);

再看下 P 的值是否和kernel 中给m_dst_devicemem2的赋值一样。

楼主您好,济南暴风雨+雷电! 抱歉给您回复晚了。

楼主这不是一个编译错误,而是运行错误,甚至可能不是一个错误:
(1)如果您没有执行cudaMalloc,直接就将鼠标移动到了m_dst_devicemem2上试图查看他的值,然后您看到了0x00000000(NULL), 这个是有可能的。
(2)如果在执行过cudaMalloc后,才将鼠标移动过去的,那么此值显然表示您的内存分配失败了。
您应当检查下cudaMalloc的返回值的。

感谢来访。

我是运行完了cudaMalloc后才把鼠标移至m_dst_devicemem2的啊,cudaMalloc的返回值有时是cudasuccess,有时是错误的。怎么我分配个显存都报错那?怎么会出现时对时错的情况那?CUDA这么神奇?
ps:版主在济南啊?老乡啊,版主上班了还是上学?

LZ您好:

cudaMalloc()是成熟的API函数,一般仅在参数错误的时候才不成功,如果您有分配失败的情况,请您检查一下您使用的参数。

祝您好运~

试过了您的方法,第一次是正确的,第二次是错误的。很是奇怪啊.难道跟我前面C++代码有关?

这种错误跟我用cuda之前,也就是前面纯C++代码分配内存等操作有没有关系?怎么时对时错那?

LZ您好:

这个一般只和参数有关的,如果发生了连带性的错误,请您检查您前面的代码。在程序正确的前提下,cudaMalloc()应当不会受到其他代码的影响。

祝您好运~