我是c编程的新手。谁能告诉我有什么问题 以下程序?
typedef struct Person_s
{
int age;
char name[40];
} Person_t;
int process_list(int *countReturned, Person_t **p_list)
{
Person_t *rowPtr=0;
//the actual program will fethc data from DB
int count =1;
if(!((*p_list) = (Person_t *) malloc(sizeof(Person_t))))
{
return -1;
}
rowPtr = *p_list;
rowPtr[count-1].age =19;
strcpy(rowPtr[count-1].name,"Prince Dastan");
*countReturned = count;
return 0;
}
int main(int argc, char *argv[])
{
Person_t *tmpPerson=0;
Person_t **p_list=0;
int *count=0;
int i;
process_list(count,p_list);
tmpPerson = *p_list;
for(i=0; i< *count; i++)
{
printf("Name: %s , age: %d\n",tmpPerson->name,tmpPerson->age);
tmpPerson++;
}
//free(tmpPerson);
return 0;
}
答案 0 :(得分:3)
您的问题是您将指针设置为指向NULL(0),然后取消引用它们。您不能取消引用NULL。想要的更像是这样:
int main(int argc, char *argv[])
{
Person_t tmpPerson;
Person_t *p_list=0;
int count;
int i;
process_list(&count, &p_list);
tmpPerson = *p_list;
// and so on...
&
是“address-of”运算符,它返回指向变量地址的指针。所以这会传递一个指向count
和p_list
的指针,然后你的函数会用它来设置那些你想要做的变量。
答案 1 :(得分:1)
你应该在main:
Person_t *p_list=0;
...
process_list(count, &p_list);
写入的代码将0传递给process_list,然后你有:
*0 = (Person_t *)malloc(...);
这会导致0被取消引用,并且您的代码将崩溃。
答案 2 :(得分:0)
输入函数时p_list
的值为0.如果取消引用0,则会出现总线错误。
if(!((*p_list) = (Person_t *) malloc(sizeof(Person_t))))
(90%的C问题是由解除引用空指针引起的,就像90%的Java问题是由错误配置的类路径引起的。: - )