[英]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.