首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入排序时的故障分割

插入排序时的故障分割
EN

Stack Overflow用户
提问于 2016-05-28 12:51:24
回答 1查看 106关注 0票数 0

我试图通过调用in排序函数来实现插入算法。不知怎么的,在我的过程中,我犯了一些错误,终端打印出了分段错误。请帮帮忙。谢谢!

代码语言:javascript
复制
int 
main(int argv,char *argc[]){
    int A[argv-2];
    for(int i=1;i<argv;i++){
        A[i-1]=atoi(*(argc+i));
    }
    insort(&A,argv-1,0);
    for(int i=0;i<argv-1;i++){
        printf("%d",A[i]);
    }
    printf("\n");
    return 0;
}

int
insort(int *A[],int size,int n){
    int temp;
    if(n<size){
        for(int i=n;i>=0 && *(A+i)>*(A+i-1);i--){
            temp=*(A+i-1);
            *(A+i-1)=*(A+i);
            *(A+i)=temp;
        }
    }
    return insort(A,size,n++);
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 13:06:32

在编译任何程序时,请注意编译器发出的警告。

对于每个警告,您必须了解为什么会给出它,以及如何正确地修复它。

代码语言:javascript
复制
$ gcc -std=c99 insort.c
insort.c:7:9: warning: implicit declaration of function 'atoi' [-Wimplicit-function-declaration]
insort.c:11:9: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]

要解决这些问题,请在最上面插入以下行:

代码语言:javascript
复制
#include <stdio.h> // for printf
#include <stdlib.h> // for atoi

下一个:

代码语言:javascript
复制
insort.c:10:5: warning: implicit declaration of function 'insort' [-Wimplicit-function-declaration]

要修复它,请将整个insort函数移动到main函数之上。

下一个:

代码语言:javascript
复制
insort.c:23:17: warning: assignment makes integer from pointer without a cast

这个真的很糟糕。参数int *A[]实际上意味着int **A,它是指向int指针的指针。若要解决此问题,请删除方括号。

下一个:

代码语言:javascript
复制
insort.c:22:12: warning: passing argument 1 of 'insort' from incompatible pointer type

没有必要使用&运算符。当将数组传递给函数时,它会衰减为指向数组开头的指针。删除&

现在,程序编译时没有发出任何警告。那很好。下一级:

代码语言:javascript
复制
$ gcc -std=c99 -Wall -Wextra -Os insort.c

哇。即使启用了所有这些警告,编译器也不再抱怨了。那很好。

( -Os优化选项是启用某些警告所必需的,因为它们只有在编译器优化代码时才会进行测试。)

现在程序编译了。当运行它时,它似乎被困在一个无休止的循环中。但最糟糕的错误现在已经解决了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37499212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档