我之前提出过类似的问题。我得到的答案指出我的错误是没有为指针留出内存。以下代码仍然抱怨错误:在赋值时无法将'void *'转换为'double'。这是否意味着数组中的所有元素都被留作NULL?
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int N = 2;
int main(int argc, char *argv[])
{
double *p[N];
for(int i = 0; i<N; ++i){
*p[i]=malloc(sizeof(double));
}
*p[0] = 1.0;
*p[1] = 2.0;
cout << p[0] << " " << p[1] <<endl;
*p[0] = 5.0;
*p[1] = 6.0;
cout << p[0] << " " << p[1] <<endl;
return 0;
}
我需要一个数组来解决我遇到的问题。数组需要在全局内存中(在CUDA中),它需要是GPU可以读/写的指针。
答案 0 :(得分:2)
P [I] = malloc的(的sizeof(双));
..摆脱&#39; *&#39;这是取消引用double类型并尝试将malloc()结果赋给它。
答案 1 :(得分:1)
*p[i]=malloc(sizeof(double));
一个取消引用太多了,你正在运行C ++更严格的类型检查。使用:
p[i]=(double*)malloc(sizeof**p);
甚至更好的C ++风格:
p[i] = new double*;
只有因为您立即退出程序才可以释放已分配的内存。最好不要养成习惯。始终使用补充解除分配器,例如:free()
用于malloc()
,delete
用于new
,delete []
用于new []
。
无论如何,为什么要在那里使用指针?此外,惯用的C ++几乎将所有原始数组放入std::vector
和其他容器中。
答案 2 :(得分:1)
你可能想这样做:
double* p = new double[2];
p[0] = 1.0;
p[1] = 2.0;
p[0] = 5.0;
p[1] = 6.0;
避免使用malloc,并且通常要小心在堆上分配内存(如前所述,您可能会阅读有关C ++内存管理的更多信息)。
干杯!