为指针分配内存时出现问题
Issue with allocating memory for 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可以从/向读/写的指针。
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
用于new
,delete []
用于new []
。
无论如何,为什么要在那里使用指针呢?此外,惯用C++将几乎所有的原始数组放入std::vector
和其他容器中。
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 包含矢量指针的结构的内存释放问题
- 在函数中分配内存时出现问题
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- 释放内存(主题模板)时出现问题
- C++ 中 std::vector 的内存问题
- C++ DLL 堆内存分配问题
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 字符 * 未从重载运算符或内存管理问题正确返回
- delete[]有问题,如何部分删除内存
- 内存泄漏问题
- 指向动态内存中结构中的变量时出现问题
- c++中的内存管理问题
- C++堆栈内存管理问题
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- JNA 参数问题:内存访问无效
- boost的问题::内存映射~500MB,外部USB文件