簡體   English   中英

打印垃圾

[英]Getting garbage printed

我正在嘗試以下簡單的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

有人可以幫助調試此代碼。 謝謝。

這條線

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

從堆棧中提取sizeof(*c)字節,其中只有第一個字節是有效內存,由以下內容分配:

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

由於sizeof(*c)肯定大於1因此上面對printf()的調用引發了不相關的行為。


雖然我無法解析這個問題:

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

1對我來說看起來很模糊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM