读书人

指针有关问题困惑好久。

发布时间: 2013-01-08 14:02:14 作者: rapoo

指针问题,困惑好久。。


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

读书人网 >C语言

热点推荐