這是一段代碼,如果我使用gcc編譯器運行這段代碼,我會得到段錯誤。實際上是什麼以及它爲什麼會發生在這段代碼中。獲取輸入到數組的分段錯誤
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
struct node
{
int number;
struct node *right;
struct node *left;
};
void funct(struct node *root,int num,int counter,int limit,int *arr)
{
if(root==NULL)
{
root=malloc(sizeof(struct node));
}
if(counter>=limit)
{
root->left=NULL;
root->right=NULL;
return;
}
root->number=num;
counter++;
funct(root->left,num+arr[0],counter,limit,arr);
funct(root->right,num+arr[1],counter,limit,arr);
}
void getdata(struct node *root,int *res,int counter)
{
while(root->left!=NULL&&root->right!=NULL)
{
getdata(root->left,res,counter);
getdata(root->right,res,counter);
}
res[counter]=root->number;
}
int main()
{
int t,i,n,arr[2],*res,size,j;
scanf("%d",&t);
j=0;
while(j++<t)
{
scanf("%d",&n);
scanf("%d %d",&arr[0],&arr[1]);
size=pow(2,n-1);
res=malloc(size*sizeof(int));
if(res==NULL)
{
printf("you got this one");
}
struct node *root=NULL;
funct(root,0,0,n,arr);
getdata(root,res,0);
for(i=0;i<size;i++)
{
printf("%d\t",res[i]);
}
}
return 0;
}
在這裏,我使用gcc編譯器上ubuntu.I試圖追查問題,認爲有一些問題,在scanf ARR輸入。
1.縮進代碼。 2.使用調試器查找分段錯誤的位置 – 2014-11-02 06:57:46
使用gdb等調試器,查看分段錯誤發生的位置以及原因。 – Rohan 2014-11-02 06:57:50
你在哪裏分配'root'?什麼是'func'和'getdata'? 「尋求調試幫助的問題(」爲什麼這個代碼不工作?「)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。給其他讀者,參見:[**如何創建一個最小,完整和可驗證的示例**](http://stackoverflow.com/help/mcve)。「 – 2014-11-02 07:30:56