2 qq 36710036 qq_36710036 于 2017.01.15 18:57 提问

使用GCC编的C语言选择法排序程序,出现段错误

make后没有错误提示,就是运行时提示段错误

#include
#include

#define M 10

void main(void)
{
int i,j,tmp,k;
int a[M] = {23,45,48,12,17,15,11,24,27,28};
for (i = 0;i < (M-1);i++)
{
k = j;
for (j =(i+1);j < M;j++)
{
if(a[k] > a[j])
k=j;
}

if (i != k)
{
tmp=a[k];
a[k]=a[i];
a[i]=tmp;
}

}

for (i = 0;i < M;i++)
printf("%d\t",a[i]);
printf("\n");
}

2个回答

qq_16907619
qq_16907619   2017.01.15 19:33
已采纳

第一个循环里的k=j 但是j那个时候还没被赋值

justin_bkdrong
justin_bkdrong   2017.01.15 19:04

是否没有生成可执行的文件,只生成了编译的obj 文件?

qq_36710036
qq_36710036 已经找出来了 O(∩_∩)O谢谢 k=i 写成k=j 啦
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Linux下简单的c编程——选择法排序
针对函数和数组的C语言的学习,我今天来写一个比较典型的数组和函数的结合的例子——选择法排序 选择法顾名思义,先选择最大和最小的数,然后再进行排序 第一步首先附上我的代码。第一段代码是实现从大到小排序,建立selectionsort.c文件#include void arrange(int a[10]){ int k; int j; int i; int temp; for(i =
gcc编译通过,运行却显示“段错误”的解决方法
​第一次在Liunx上(liunx mint 17)使用gcc编译c文件,竟然提示“找不到stdio.h",经过google后发现执行 sudo apt-get install build-essential即可,详见:http://slipper-99933.blog.163.com/blog/static/39954044201021651833785/​。     ​刚学习了柔性数组,照教
strcmp/strncmp导致的段错误浅析
引出问题 项目中有如下代码片段: #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;string.h&amp;amp;gt; struct st { char *buf; int buflen; }; static void st_test(struct st *st) { char *msg = &amp;quot;abc&amp;quot;; /* 若注释下行代码会导致段错误...
C语言sprintf使用出现段错误
#include #include void Block(int function_no,int instrument_no) { char *function; char *instrument; char *result; sprintf(function,"%d",function_no); sprintf(instrument,"%d",instrument_no);
解决Linux c语言运行时候“段错误 (核心已转储)”问题-采用gdb 解决
编译没有警告,没有错误,运行就打印 段错误 (核心已转储) 网上找了一下,都是各种问题,都推荐用gdb 调试解决,咱也来趁机学习gdb一下。 gcc+gdb)输入命令行 运行 sudo apt-get install build-essential build-essential包含gcc和gdb等工具,是C语言的开发包。 安装完了可以执行 一般来说GDB主要调试的
C语言指针段错误
一个网友问了我一个问题,一个C程序运行出现了段错误,这个问题非常好,很多初学者都容易犯这个错误,具体代码如下: 这个编译没有问题,但是运行是段错误    Segmentation fault 因为你定义了一个结构体指针p,用来指向此类结构体,但是你却没有给他赋值,此时p的值为NULL,你并没有在内存中为p分配任何空间,所以p->a=1这句就会出段错误。 修改方法1:可
c语言中常见的几个段错误
通常导致段错误的几个直接原因: (1)解除引用一个包含非法值的指针 (2)解除引用一个空指针(常常由于从系统程序中返回空指针,并未检验就使用) (3)在未得到正确的权限时进行访问。例如,试图往一个只读文本段存储值就会引起段错误 (4)用完了堆栈或堆空间(虚拟内存虽然巨大但绝非无限)     以发生频率为序,最终可能导致段错误的常见编程错误是: 1.  坏指针值错误: 在指针赋值之前就用
C语言段错误调试
有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误"。 呵呵,这种问题我想很多人会经常遇到。遇到这种问题是非常无语的,只是提示了"段错误",接着什么都没 有,如果我们一味的去看代码找太疼苦了,因为我们都相信自己写的代码没问题,现实就是现实。下面介绍一种方法,可以有效的定位出现"段错误的地方"。 当我们的程序崩溃时,内
Linux环境下使用memcpy函数遇到段错误问题
Linux 环境下编写以下程序,会出现段错误:#include &quot;stdio.h&quot; #include &amp;lt;stdlib.h&amp;gt; #include &quot;string.h&quot; void main() { char Data[] = &quot;qwertyuiop&quot;; char *data ; memcpy (data,Data,sizeof(Data) ); print...
C语言程序对数字排序例题
题目: 对10个数进行排序。 1.程序分析: 可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。 2.程序源代码: #define N 10 main() {int i,j,min,tem,a[N]; /*input data*/ printf( “C语言研究中心 www.dotcpp.com\n” );