为指针分配内存的问题

时间:2014-04-14 13:42:56

标签: c++ pointers

我之前提出过类似的问题。我得到的答案指出我的错误是没有为指针留出内存。以下代码仍然抱怨错误:在赋值时无法将'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可以读/写的指针。

3 个答案:

答案 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用于newdelete []用于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 ++内存管理的更多信息)。

干杯!