为指针分配内存时出现问题

Issue with allocating memory for pointers

本文关键字:问题 内存 指针 分配      更新时间:2023-10-16

我之前也问过类似的问题。我得到的答案表明我的错误是没有为指针留出内存。以下代码仍然报告错误:无法将赋值中的"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可以从/向读/写的指针。

p[i]=malloc(sizeof(double));

去掉正在取消引用double类型并试图将malloc()结果分配给它的'*'。

您可能想要这样做:

double* p = new double[2];
p[0] = 1.0;
p[1] = 2.0;
p[0] = 5.0;
p[1] = 6.0;

避免malloc,通常要小心在堆上分配内存(如前所述,您可能会阅读更多关于C++内存管理的内容)。

干杯!

*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和其他容器中。