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

C++指针传值有关问题

2013-11-05 
C++指针传值问题int main(){unsigned char data[10]{1,2,3,4,5,6,7,8,9,10}int data_len10unsigned ch

C++指针传值问题
int main()
{
unsigned char data[10]={1,2,3,4,5,6,7,8,9,10};
int data_len=10;
unsigned char** new_data=NULL;
int new_data_len=0;

mycopy(data,new_data,data_len,&new_data_len);
printf("new_data_len=%d\n",new_data_len);
printf("\n");
if (new_data==NULL){
printf("NULL.....\n");
}
for(int i=0;i<new_data_len;i++){
printf("%d\n",*((*new_data)+i));
}
return 0;
}

void mycopy( unsigned char* class_data,unsigned char** new_class_data, int class_data_len,int* new_class_data_len){
*new_class_data_len=class_data_len;
printf("new_class_data_len=%d\n",*new_class_data_len);
new_class_data=(unsigned char **)malloc(sizeof(unsigned char));
*new_class_data=(unsigned char *)malloc(class_data_len);
printf(".........\n");
memcpy(*new_class_data,class_data,class_data_len);
for(int i=0;i<class_data_len;i++){
printf("%d\n",*((*new_class_data)+i));
}
}
问题是这样的 如何在不改变 mycopy声明形式以及unsigned char data[10]={1,2,3,4,5,6,7,8,9,10};
int data_len=10;
unsigned char** new_data=NULL;
int new_data_len=0;
这四个变量的声明方式的前提下 通过函数将data 值赋给 new_data,上述代码是小弟写的,函数里改变的值不能影响函数外的变量new_data,C++ 不精通 ,各位大侠求解啊

这个问题来源于JVM的代理函数typedef void (JNICALL *jvmtiEventClassFileLoadHook)
    (jvmtiEnv *jvmti_env, 
     JNIEnv* jni_env, 
     jclass class_being_redefined, 
     jobject loader, 
     const char* name, 
     jobject protection_domain, 
     jint class_data_len, 
     const unsigned char* class_data, 
     jint* new_class_data_len, 
     unsigned char** new_class_data);
因为其声明形式固定,只能寻求在函数内去解决指针传值问题(如何把class_data数据赋给new_class_data);  C++?指针?传值
[解决办法]
LZ这个要求很奇怪,既然是char**pp 则必然需要一个char* p,那你还需要中间指针变量?

char*  p=Data;
new_Data=&p;

或者是:
char** new_Data=new char*;
*new_Data=Data";

好奇怪的用法

[解决办法]
楼主看看,可以在传参数之前就给它分配地址就好了


void mycopy( unsigned char* class_data,unsigned char** new_class_data, int class_data_len,int* new_class_data_len)
{
    *new_class_data_len = class_data_len;
    printf("new_class_data_len=%d\n",*new_class_data_len);
//  new_class_data=(unsigned char **)malloc(sizeof(unsigned char *));
    *new_class_data=(unsigned char *)malloc(class_data_len);
    printf(".........\n");
    memcpy(*new_class_data,class_data,class_data_len);
    for(int i=0;i<class_data_len;i++)
    {   
        printf("%d\n",*((*new_class_data)+i));
    }   
}

int main(void)
{
    unsigned char data[10]={1,2,3,4,5,6,7,8,9,10};
    int data_len=10;
    unsigned char** new_data=NULL;
    int new_data_len=0;
    new_data = (unsigned char **)malloc(sizeof(unsigned char *));
        
    mycopy( data, new_data, data_len, &new_data_len);
    printf("new_data_len=%d\n",new_data_len);
    printf("\n");
    if (new_data == NULL)
    {   
        printf("NULL.....\n");
    }   
    for(int i= 0;i < new_data_len; i++)
    {   
        printf("%d\n",*((*new_data)+i));
    }   
        
    return 0;
}

[解决办法]
修改如下两行就行:

unsigned char* new_data=NULL;

mycopy(data, &new_data,data_len,&new_data_len);


// 传入mycopy的是变量的地址

热点排行