2

関数が値を簡単に返すときに例外が発生し続ける理由を理解するのに非常に苦労していますが、結果を印刷しようとすると、未処理の例外エラーが発生します(以下を参照) C は初めてですだから私はJavaの観点からすべてを見てきましたが、それを理解することはできません。

これが私の相対的なコードです(reduceは、int値を含むノードの配列であるリンクリストと、リスト内の次のノードへのポインターを受け取り、最後のノードはnullを指します)

int reduce(int (*func)(int v1, int v2), LinkedListP list, int init){

int i, sum;
struct node *first, *second;


sum = 0;
first = list->head;
second = list->head->next;

for(i = 0;i < list->count; i+=2)
{
//checks to see if there are values in the list at all
if(first == NULL)
{
    return sum;
}
//if first value is good, and the second value is null, then sum the final one and return the result
else if(second == NULL)
{
    sum += func(first->value, init);
        return sum;

}
//otherwise there is more to compute
else
{
    sum += func(first->value, second->value);
}

    //first now points to the next node that seconds node was pointing to
    first = second->next;

    //if the first link is null, then there is no need to assign something to the second one
    if(first == NULL){
        return sum;
    }
    else{
        second = first->next;
    }

}

}

メインでは、2 つの値を加算する sum という関数へのポインタを渡します。

シンプルなコード

newLink = new_LinkedList();
int(*reduceFunc)(int, int);
reduceFunc = sum;


result = reduce(sum, newLink, 0);

printf("Total is : %s", result );

すべてがこの VVVVVVVV をスローするようになりました

ExamTwo.exe の 0x1029984f で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000015。

4

2 に答える 2

4

reduce() 関数は int を返していますが、printf() に文字列のフォーマット コードを指定しています。試す

printf("Total is : %d", result );
于 2012-04-14T20:43:38.753 に答える
0

printf で %s を %d に置き換える必要があります。

于 2012-04-14T20:43:27.397 に答える