首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

数组指针地址自动改变解决方案

2014-04-22 
数组指针地址自动改变大家好,本人在学习数组指针时,编写了一个小的赋值程序,但程序中确出现了指针地址自动

数组指针地址自动改变
大家好,本人在学习数组指针时,编写了一个小的赋值程序,但程序中确出现了指针地址自动改变的“诡异现象”,现将代码和出现的问题描述如下,求各位大神指教,万分感谢!!

template<typename T>
T** MemAlloc2d(int NoCols, int NoRows)
{
    int k;
T** matrix2d;
matrix2d = (T **)malloc((NoRows)*sizeof(T *));
for(k=0; k<NoCols; k++)
{
*(matrix2d + k) =(T*)malloc((NoRows)*sizeof(T));
}
return matrix2d;
}
template<typename T>
void MemFree2d(T** matrix2d, int NoCols, int NoRows)
{
int k;
for(k=0; k<NoCols; k++)
{
free(*(matrix2d + k));
}
free(matrix2d);

int _tmain(int argc, _TCHAR* argv[])
{
    float** pData = MemAlloc2d<float>(517,495);
    for(int i = 0;i < 517; i++)
{
float* temp = new float[495];
    for(int i = 0; i< 495; i++)
{
temp[i] = i + 0.1f;
}
memcpy(&pData[i][0],temp,495*sizeof(float));
delete[] temp;
}
    MemFree2d<float>(pData,517,495);
}

在VS2008中运行程序出现【Unhandled exception at 0x1026edac (msvcr90d.dll) in QtHello.exe: 0xC0000005: Access violation writing location 0x3dcccccd】,手动进入调试后发现,原来在执行33行代码后,pData[510]及其之后分配的内存地址发生了改变。执行33行代码前&pData[510][0]为0x02aa6100,执行后变为0x3dcccccd,即原先分配的内存地址自动改变了。
[解决办法]
 for(int j= 0; j< 495; j++)
        {
            temp[j] = j + 0.1f;
        }
        memcpy(&pData[i][0],temp,495*siz

热点排行