指针问题,困惑好久。。
#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;
}
[解决办法]
刚刚回复有问题,看我第二个回复,应该可以的!
[解决办法]
你基本已经回答正确了,至于*array =这个确实不好看,但是你需要知道*array才是二阶指针。一般要好看的话是定义一个临时变量,如下:
char **p = NULL;//二阶指针
p = *array;