hur.cn - 华软网

 热门搜索

地址空间问题

  作者:未知    来源:网络    更新时间:2011/8/13
A  函数malloc并初始话后退出,B函数打印该区域内容,但发现A函数退出时初始化的内容发生了变化
在调用APP_Area_Init()初始化addr开始的内存后,调用Print_Area()打印该区域,发现addr[0][0] - addr[138][5]的值都变成了乱码!
C++">
//GuessNumber.c
#include "GuessNumber.h"


char**  App_Area_Init( void)
{
char **addr;
uint i;
uint j;

if (!(addr =(char **) malloc(720)))
{
printf("malloc failed in apply total!\n");
}

for (i = 0; i < 720; i++)
{
if (!(addr[i] = (char *) malloc(6)))
{
printf("malloc failed in apply branch!\n");
}
for (j = 0; j < 6; j++ )
{
addr[i][j] = j + '0';
}
}

return addr;
}


void Print_Area(char **addr)
{
uint i;
uint j;
int fd;


for(i = 0; i < 10; i++)
{
      
printf("add[%d] is:",i);

for(j = 0; j < 6; j++)
{
printf("%c",addr[i][j]);
        }
if(!(i%6))
{
       printf("\n");
}

}
return;
}




C++">
int main()
{
char **addr;

addr =(char **) App_Area_Init();
Print_Area(addr);

return 0;
}

---华软 网友回答---
addr[i][j] = j + '0';

有问题把
---华软网友回复---
A函数退出时初始化的内容发生了变化

在A函数里找吧。你可以加内存断点debug之
---华软网友回复---
C++">
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

char**  App_Area_Init( void)
{
    char **addr;
    UINT    i;
    UINT    j;
    
    if (!(addr =new char*[720]))
    {
        printf("malloc failed in apply total!\n");
return NULL;
    }
    
    for (i = 0; i < 720; i++)
    {
        if (!(addr[i] = new char[6]))
        {
            printf("malloc failed in apply branch!\n");
delete[] addr;
addr = NULL;
return NULL;
        }
    }

for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 6; j++ )
        {
            addr[i][j] = j + '0';
        }
    }
    
    return addr;
}


void    Print_Area(char **addr)
{
    UINT i;
    UINT j;
    int fd;

    for(i = 0; i < 10; i++)    
    {

        printf("add[%d] is:", i);

        for(j = 0; j < 6; j++)
        {
            printf("%c",addr[i][j]);
}
        if(!(i%6))
        {
printf("\n");
        }
        
    }
    return;
}    


int main()
{
  char **addr;
    
    addr =(char **) App_Area_Init();
    Print_Area(addr);

for(int i=0; i<6; i++)
{
delete[] addr[i];
addr[i] = NULL;
}
delete[] addr;
addr = NULL;
return 0;
}



---华软网友回复---
学习。。。
---华软网友回复---
    if (!(addr =(char **) malloc(720*sizeof(char*))))
    {
        printf("malloc failed in apply total!\n");
    }      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。