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;
}