使用字串 arg 在單個源上呼叫 clCreateProgramFromSource 會設定 #included 字符陣列段錯誤的地址,但將陣列作為字符指標陣列的元素傳入是可行的。
#include "prog_src.h"
const char *cl_srcs[1];
cl_srcs[0] = prog_src_cl;
cl.prog = clCreateProgramWithSource(cl.context, 1, cl_srcs, NULL, &err);
puts("test0");
cl.prog = clCreateProgramWithSource(cl.context, 1, &prog_src_cl, NULL, &err);
puts("test1");
“test0”將列印,然后程式段錯誤,我不確定為什么它不適用于第二個版本,prog_src_cl 是#included 檔案中的無符號字符 *。
任何幫助將不勝感激,因為我似乎無法理解為什么如此看似微不足道的事情不能按預期作業。
uj5u.com熱心網友回復:
該函式clCreateProgramWithSource期望通過引數傳遞源const char** strings。你說的prog_src_cl是字符陣列。這意味著它&proc_src_cl的型別為const char (*)[N]。(指向 N 元素常量字符陣列的指標,其中 N 可能是用于初始化陣列的字串的長度,加上 1 表示 nul 終止字符。)這與 不同const char**,您不能安全地在它們之間進行轉換!
我建議您在 C 編譯器中打開更多型別檢查選項,例如傳遞-Wextra給 clang 或 gcc。例如,clang 在-Wincompatible-pointer-types警告中捕獲此編程錯誤,該警告包含在-Wextra.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371824.html
上一篇:代碼跳過驅動程式2和3名稱的輸入,但列印驅動程式1并將所有驅動程式的km輸出列印為0.00
下一篇:是否可以偽造請求的域?
