指针问题,困惑好久。。#include stdio.h#include malloc.hvoid build_2d_array(int file_count , int di
指针问题,困惑好久。。
#include <stdio.h> #include <malloc.h> void build_2d_array(int file_count , int dict_size , char **array) ; void print_array(int m , int n , char**p); int main(){ int a= 5 ; int b = 20 ; char **vector=NULL; build_2d_array(a,b,vector) ; print_array(a,b,vector) ; return 0 ; } void build_2d_array(int file_count , int dict_size , char **array) { int i,j ; array = (char**)malloc(file_count*sizeof(char*)) ; for(i=0 ; i< file_count ; i++) *(array+i) = (char*)malloc(dict_size*sizeof(char)) ; for (i=0;i<file_count;i++) for(j=0 ; j<dict_size ; j++) *(*(array+i)+j) = '1' ; } void print_array(int m , int n , char **p) { int i,j; for(i=0 ; i< m ; i++) for(j=0 ; j< n; j++) printf("element are:\n",*(*(p+i)+j)); for(i=0 ; i<m ; i++) free(*(p+i)) ; free(p); }编译可以通过,提示的时候一直为:0xC0000005: 读取位置 0x00000000 时发生访问冲突
以前好多次也碰到过,希望这次能彻底弄清楚,谢谢!
[解决办法] char **vector=NULL;
build_2d_array(a,b,vector) ;
print_array(a,b,vector) ;
这里vector并没有初始化到,
这样改吧:
char **vector = build_2d_array(a,b) ;
char **build_2d_array(int file_count , int dict_size )
{
char **array = NULL;
int i,j ;
array = (char**)malloc(file_count*sizeof(char*)) ;
for(i=0 ; i< file_count ; i++)
*(array+i) = (char*)malloc(dict_size*sizeof(char)) ;
for (i=0;i<file_count;i++)
for(j=0 ; j<dict_size ; j++)
*(*(array+i)+j) = '1' ;
return array;
}
[解决办法] array = (char**)malloc(file_count*sizeof(char*)) ;
没有仔细看程序,不过此式很具创造性
二级指针是指向指针的指针,也就是一个变量中存储了一个内存地址,这个内存地址处存储的仍然是一个地址,
[解决办法] sorry, ignore my previous reply!
void build_2d_array(int file_count , int dict_size , char **array) { int i,j ; array = (char**)malloc(file_count*sizeof(char*)) ; for(i=0 ; i< file_count ; i++) *(array+i) = (char*)malloc(dict_size*sizeof(char)) ; //should be here have mistake, change to *(array+i) = (char*)malloc(dict_size*sizeof(char *)) ; for (i=0;i<file_count;i++) for(j=0 ; j<dict_size ; j++) *(*(array+i)+j) = '1' ; }
[解决办法] 这样改,你应该明白吧:
char **vector=NULL;
build_2d_array(a,b, &vector) ; ////here
print_array(a,b,vector) ;
void build_2d_array(int file_count , int dict_size, char ***parray ) ////here
{
char **array = NULL;
int i,j ;
array = (char**)malloc(file_count*sizeof(char*)) ;
for(i=0 ; i< file_count ; i++)
*(array+i) = (char*)malloc(dict_size*sizeof(char)) ;
for (i=0;i<file_count;i++)
for(j=0 ; j<dict_size ; j++)
*(*(array+i)+j) = '1' ;
*parray = array;
}
[解决办法] 引用: 引用:C/C++ code ? 12345678910111213141516171819202122232425262728293031323334353637383940414243 #include <stdio.h> #include <malloc.h> void build_2d_array(int …… 刚刚回复有问题,看我第二个回复,应该可以的!
[解决办法] 引用: 引用:上面的有问题,这个应该没错: C/C++ code ? 1234567891011121314151617181920212223242526272829303132333435363738 #include <stdio.h> #include <malloc.h> void build_2d_…… 你基本已经回答正确了,至于*array =这个确实不好看,但是你需要知道*array才是二阶指针。一般要好看的话是定义一个临时变量,如下:
char **p = NULL;//二阶指针 p = *array;