打印垃圾

时间:2013-12-27 17:58:42

标签: c cuda garbage

我正在尝试以下简单的CUDA C代码但打印垃圾值:

#include <stdio.h>

__global__ void hellocuda(int* tidx){
   *tidx = 100;
}

int main(){

    int* d_tidx;
    int* c;

    cudaMalloc((void**) &d_tidx, 1);

    c = (int*)malloc(sizeof(int));

    hellocuda<<<1,1>>>(d_tidx);

    cudaMemcpy(c, d_tidx, sizeof(int), cudaMemcpyDeviceToHost);

    printf("%d\n", *c);

    return EXIT_SUCCESS;
}

我得到的输出是:-273093020

有人可以帮助调试此代码。感谢。

1 个答案:

答案 0 :(得分:2)

这一行

printf("%d\n", *c);

从堆栈中提取sizeof(*c)个字节,其中只有第一个字节是有效内存,由以下内容分配:

int * c;
...
c = (int*) malloc(1);

由于sizeof(*c)明确地大于1,因此上面printf()的调用会引发不相关的行为。


尽管我无法解析这个:

cudaMalloc((void**) &d_tidx, 1);

1看起来很模糊。