这是指针运算的下一个棘手的方面通过sizeof(T)
添加1的指针,TO-牛逼增量,而不是按照1所以,你应该删除* sizeof(ProbConfig)
让这个做你想做的。
假设这实际上是C,这将是更好的风格来写这个是可以:
dev_probConfig = _aligned_malloc(N * sizeof(ProbConfig), 64);
for (size_t i = 0; i < N; i++)
memcpy(&dev_probConfig[i], h_probConfig, sizeof(ProbConfig));
,或者使用结构分配,而不是memcpy
,
dev_probConfig = _aligned_malloc(N * sizeof(ProbConfig), 64);
for (size_t i = 0; i < N; i++)
dev_probConfig[i] = h_probConfig;
&dev_probConfig[i]
相同dev_probConfig + i
,但它更清晰,正是因为指针算术的这种技巧。
此外,不蒙上了malloc
样功能C.这是没有必要的结果,并且它可以隐藏的错误:例如,如果你忘了,包括在使用malloc
程序stdlib.h
中,传统的“隐式声明”规则踢入并且malloc
被视为返回int
而不是void *
。如果int
和void *
的大小不相同(例如,因为int
的宽度是32位,但指针的宽度是64位),这会以一种可能在您的程序不得不比平常更紧密地关闭数据之前才会注意到的方式破坏指针。你会从编译器得到一个警告 - 但是只有当你没有强制返回值。
(在C++中,你要投的malloc
样函数的结果,但在C++中,你应该使用std::vector
反正你可以使用一个custom allocator得到std::vector
与数组备用定位;这看起来可怕复杂但实际上只是很多样板)。
C和C++是不同的语言,代码应该写在每个不同的语言。请删除无关标签。还有什么是'_aligned_malloc'?它不是一个标准功能。它可能是您不允许在应用程序代码中使用的内部符号。提供[mcve]。 “我的代码不起作用”不是有效的问题描述。阅读[问]。 – Olaf
我鼓励你把它写成'memcpy(&dev_probConfig [i],h_probConfig,sizeof(ProbConfig));'。这更清楚并保证正确处理指针运算。我假设你已经将'h_probConfig'声明为一个指针。 –