回答自己的问题.
#include
#include <cuda_runtime.h>
#include <stdio.h>
device double* dVectorEx;
global void gpu(int n,int m)
{
for(int i = 0; i < 10; ++i)
{
dVectorEx = new doublen * m + i;
for(int j = 0; j < n*m+i; ++j)
{
printf("dVectorEx[%d] = %0.1f\t",j,dVectorEx[i]);
printf("&dVectorEx = %d\t",dVectorEx+j);
}
printf("\n");
delete[] dVectorEx;
}
}
int main()
{
int n = 0;
int m = 0;
std::cin >> n >> m;
gpu<<<1,1>>>(n,m);
cudaDeviceReset();
return 0;
}
这是修改的代码;
输出:
2
3
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488 dVectorEx[11] = 0.0 &dVectorEx = 22149496
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488 dVectorEx[11] = 0.0 &dVectorEx = 22149496 dVectorEx[12] = 0.0 &dVectorEx = 22149504
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488 dVectorEx[11] = 0.0 &dVectorEx = 22149496 dVectorEx[12] = 0.0 &dVectorEx = 22149504 dVectorEx[13] = 0.0 &dVectorEx = 22149512
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488 dVectorEx[11] = 0.0 &dVectorEx = 22149496 dVectorEx[12] = 0.0 &dVectorEx = 22149504 dVectorEx[13] = 0.0 &dVectorEx = 22149512 dVectorEx[14] = 0.0 &dVectorEx = 22149520
可以看出,dVectorEx的首地址都是一样的.循环10次地址都一样的,假如不释放内存会怎么样那?
代码:
#include
#include <cuda_runtime.h>
#include <stdio.h>
device double* dVectorEx;
global void gpu(int n,int m)
{
for(int i = 0; i < 10; ++i)
{
dVectorEx = new doublen * m + i;
for(int j = 0; j < n*m+i; ++j)
{
printf("dVectorEx[%d] = %0.1f\t",j,dVectorEx[i]);
printf("&dVectorEx = %d\t",dVectorEx+j);
}
printf("\n");
//delete[] dVectorEx;
}
}
int main()
{
int n = 0;
int m = 0;
std::cin >> n >> m;
gpu<<<1,1>>>(n,m);
cudaDeviceReset();
return 0;
}
结果:
2
3
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448
dVectorEx[0] = 0.0 &dVectorEx = 22149488 dVectorEx[1] = 0.0 &dVectorEx = 22149496 dVectorEx[2] = 0.0 &dVectorEx = 22149504 dVectorEx[3] = 0.0 &dVectorEx = 22149512 dVectorEx[4] = 0.0 &dVectorEx = 22149520 dVectorEx[5] = 0.0 &dVectorEx = 22149528 dVectorEx[6] = 0.0 &dVectorEx = 22149536
dVectorEx[0] = 0.0 &dVectorEx = 22149568 dVectorEx[1] = 0.0 &dVectorEx = 22149576 dVectorEx[2] = 0.0 &dVectorEx = 22149584 dVectorEx[3] = 0.0 &dVectorEx = 22149592 dVectorEx[4] = 0.0 &dVectorEx = 22149600 dVectorEx[5] = 0.0 &dVectorEx = 22149608 dVectorEx[6] = 0.0 &dVectorEx = 22149616 dVectorEx[7] = 0.0 &dVectorEx = 22149624
dVectorEx[0] = 0.0 &dVectorEx = 22149648 dVectorEx[1] = 0.0 &dVectorEx = 22149656 dVectorEx[2] = 0.0 &dVectorEx = 22149664 dVectorEx[3] = 0.0 &dVectorEx = 22149672 dVectorEx[4] = 0.0 &dVectorEx = 22149680 dVectorEx[5] = 0.0 &dVectorEx = 22149688 dVectorEx[6] = 0.0 &dVectorEx = 22149696 dVectorEx[7] = 0.0 &dVectorEx = 22149704 dVectorEx[8] = 0.0 &dVectorEx = 22149712
dVectorEx[0] = 0.0 &dVectorEx = 22149808 dVectorEx[1] = 0.0 &dVectorEx = 22149816 dVectorEx[2] = 0.0 &dVectorEx = 22149824 dVectorEx[3] = 0.0 &dVectorEx = 22149832 dVectorEx[4] = 0.0 &dVectorEx = 22149840 dVectorEx[5] = 0.0 &dVectorEx = 22149848 dVectorEx[6] = 0.0 &dVectorEx = 22149856 dVectorEx[7] = 0.0 &dVectorEx = 22149864 dVectorEx[8] = 0.0 &dVectorEx = 22149872 dVectorEx[9] = 0.0 &dVectorEx = 22149880
dVectorEx[0] = 0.0 &dVectorEx = 22149968 dVectorEx[1] = 0.0 &dVectorEx = 22149976 dVectorEx[2] = 0.0 &dVectorEx = 22149984 dVectorEx[3] = 0.0 &dVectorEx = 22149992 dVectorEx[4] = 0.0 &dVectorEx = 22150000 dVectorEx[5] = 0.0 &dVectorEx = 22150008 dVectorEx[6] = 0.0 &dVectorEx = 22150016 dVectorEx[7] = 0.0 &dVectorEx = 22150024 dVectorEx[8] = 0.0 &dVectorEx = 22150032 dVectorEx[9] = 0.0 &dVectorEx = 22150040 dVectorEx[10] = 0.0 &dVectorEx = 22150048
dVectorEx[0] = 0.0 &dVectorEx = 22150128 dVectorEx[1] = 0.0 &dVectorEx = 22150136 dVectorEx[2] = 0.0 &dVectorEx = 22150144 dVectorEx[3] = 0.0 &dVectorEx = 22150152 dVectorEx[4] = 0.0 &dVectorEx = 22150160 dVectorEx[5] = 0.0 &dVectorEx = 22150168 dVectorEx[6] = 0.0 &dVectorEx = 22150176 dVectorEx[7] = 0.0 &dVectorEx = 22150184 dVectorEx[8] = 0.0 &dVectorEx = 22150192 dVectorEx[9] = 0.0 &dVectorEx = 22150200 dVectorEx[10] = 0.0 &dVectorEx = 22150208 dVectorEx[11] = 0.0 &dVectorEx = 22150216
dVectorEx[0] = 0.0 &dVectorEx = 22150288 dVectorEx[1] = 0.0 &dVectorEx = 22150296 dVectorEx[2] = 0.0 &dVectorEx = 22150304 dVectorEx[3] = 0.0 &dVectorEx = 22150312 dVectorEx[4] = 0.0 &dVectorEx = 22150320 dVectorEx[5] = 0.0 &dVectorEx = 22150328 dVectorEx[6] = 0.0 &dVectorEx = 22150336 dVectorEx[7] = 0.0 &dVectorEx = 22150344 dVectorEx[8] = 0.0 &dVectorEx = 22150352 dVectorEx[9] = 0.0 &dVectorEx = 22150360 dVectorEx[10] = 0.0 &dVectorEx = 22150368 dVectorEx[11] = 0.0 &dVectorEx = 22150376 dVectorEx[12] = 0.0 &dVectorEx = 22150384
dVectorEx[0] = 0.0 &dVectorEx = 22150448 dVectorEx[1] = 0.0 &dVectorEx = 22150456 dVectorEx[2] = 0.0 &dVectorEx = 22150464 dVectorEx[3] = 0.0 &dVectorEx = 22150472 dVectorEx[4] = 0.0 &dVectorEx = 22150480 dVectorEx[5] = 0.0 &dVectorEx = 22150488 dVectorEx[6] = 0.0 &dVectorEx = 22150496 dVectorEx[7] = 0.0 &dVectorEx = 22150504 dVectorEx[8] = 0.0 &dVectorEx = 22150512 dVectorEx[9] = 0.0 &dVectorEx = 22150520 dVectorEx[10] = 0.0 &dVectorEx = 22150528 dVectorEx[11] = 0.0 &dVectorEx = 22150536 dVectorEx[12] = 0.0 &dVectorEx = 22150544 dVectorEx[13] = 0.0 &dVectorEx = 22150552
dVectorEx[0] = 0.0 &dVectorEx = 22150608 dVectorEx[1] = 0.0 &dVectorEx = 22150616 dVectorEx[2] = 0.0 &dVectorEx = 22150624 dVectorEx[3] = 0.0 &dVectorEx = 22150632 dVectorEx[4] = 0.0 &dVectorEx = 22150640 dVectorEx[5] = 0.0 &dVectorEx = 22150648 dVectorEx[6] = 0.0 &dVectorEx = 22150656 dVectorEx[7] = 0.0 &dVectorEx = 22150664 dVectorEx[8] = 0.0 &dVectorEx = 22150672 dVectorEx[9] = 0.0 &dVectorEx = 22150680 dVectorEx[10] = 0.0 &dVectorEx = 22150688 dVectorEx[11] = 0.0 &dVectorEx = 22150696 dVectorEx[12] = 0.0 &dVectorEx = 22150704 dVectorEx[13] = 0.0 &dVectorEx = 22150712 dVectorEx[14] = 0.0 &dVectorEx = 22150720
可以看出每一次的dVectorEx的首地址都不一样,所以相当于有10个dVectorEx数组.这就是所谓的野指针,或者内存泄露吧.这是不被允许的.
假如我们使用局部变量会怎么样那?
代码:
#include
#include <cuda_runtime.h>
#include <stdio.h>
//device double* dVectorEx;
global void gpu(int n,int m)
{
for(int i = 0; i < 10; ++i)
{
double* dVectorEx = new doublen * m + i;
for(int j = 0; j < n*m+i; ++j)
{
printf("dVectorEx[%d] = %0.1f\t",j,dVectorEx[i]);
printf("&dVectorEx = %d\t",dVectorEx+j);
}
printf("\n");
delete[] dVectorEx;
}
}
int main()
{
int n = 0;
int m = 0;
std::cin >> n >> m;
gpu<<<1,1>>>(n,m);
cudaDeviceReset();
return 0;
}
输出:
2
3
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488 dVectorEx[11] = 0.0 &dVectorEx = 22149496
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488 dVectorEx[11] = 0.0 &dVectorEx = 22149496 dVectorEx[12] = 0.0 &dVectorEx = 22149504
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488 dVectorEx[11] = 0.0 &dVectorEx = 22149496 dVectorEx[12] = 0.0 &dVectorEx = 22149504 dVectorEx[13] = 0.0 &dVectorEx = 22149512
dVectorEx[0] = 0.0 &dVectorEx = 22149408 dVectorEx[1] = 0.0 &dVectorEx = 22149416 dVectorEx[2] = 0.0 &dVectorEx = 22149424 dVectorEx[3] = 0.0 &dVectorEx = 22149432 dVectorEx[4] = 0.0 &dVectorEx = 22149440 dVectorEx[5] = 0.0 &dVectorEx = 22149448 dVectorEx[6] = 0.0 &dVectorEx = 22149456 dVectorEx[7] = 0.0 &dVectorEx = 22149464 dVectorEx[8] = 0.0 &dVectorEx = 22149472 dVectorEx[9] = 0.0 &dVectorEx = 22149480 dVectorEx[10] = 0.0 &dVectorEx = 22149488 dVectorEx[11] = 0.0 &dVectorEx = 22149496 dVectorEx[12] = 0.0 &dVectorEx = 22149504 dVectorEx[13] = 0.0 &dVectorEx = 22149512 dVectorEx[14] = 0.0 &dVectorEx = 22149520
输出的结果和第一次是一样的.
如果有错误,大家提出.