我编写了一段程序,首先定义了一个全局内存的变量Out_localscour;
之后,在GPU上为变量out_my分配空间:
然后,我用out_my进行Out_localscour的初始化:
初始化后,我释放掉out_my内存:
然后,任何核函数对于out_localscour的访问都会报错 cudaerror 77,非法内存。请问哪位大佬知道是哪一步出问题了。万分感谢!!!可以有偿解答。
Out_localscour与out_my指向的同一块内存地址吧,你把out_my释放掉,Out_localscour指向的内存也被释放了。
直接对Out_localscour分配空间呢?
从你描述的程序过程进行编码实验,是完全正常的,下列代码是可以输出值的。因此只有一种可能是,你的Out_localscour指针的空间在其他地方被释放掉了;或者,你的Out_localscour指针在后面执行中被赋值给out_my了,然后你释放out_my时,导致Out_localscour也被释放了
Out_localscourOut_localscour
#include <iostream>
#include <memory>
#include <string>
#include <cuda_runtime_api.h>
using namespace std;
int main() {
int temp_count = 100;
__device__ float3* Out_localscour= (float3*)malloc(temp_count * sizeof(float3));
void* OUT_my;
cudaError_t cts = cudaMalloc((void**)&OUT_my,sizeof(float3)* temp_count);
cudaError_t ctsy = cudaMemcpyToSymbol(Out_localscour,&OUT_my,sizeof(OUT_my));
cudaError_t cfo = cudaFree(OUT_my);
std::cout << "data: " << Out_localscour[0].x << endl;
return 0;
}
问题已经解决,我在out_localscour使用完毕后,先释放其内存再释放out_my内存是可行的,但还是不明白是啥原因不能提前释放,明明应该不是同一块内存。。。