【问题标题】:Segmentation Fault help, rookie mistake?Segmentation Fault求助,菜鸟错误?
【发布时间】:2014-02-16 21:42:26
【问题描述】:

这是一项学校作业。

本质问题是获取大量数字,在其上实现多种不同类型的 shell 排序,分析复杂性等等。

我有一个使用选择排序编写的 shell 排序(我知道它效率低下,这就是重点) 但我无法测试它。

我的主文件名为sorting_main.c,函数defs在sorting.c中。

我使用这些命令编译然后运行它。

gcc -Werror -Wall -Wshadow -O3 sorting.c sorting_main.c -o proj1

项目完成后,我就可以使用这个命令来运行它了……

./proj1 s input.txt seq.txt output.txt

我现在可以运行它,如果我在主程序中手动定义测试参数,则终端中只需 ./proj1。这就是我卡住的地方,我不知道我是否在制作要测试的东西时做错了什么,或者我的实现是否存在致命缺陷。 我的目标是测试我的选择排序...... 这是我的主要内容:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

//Function Declarations////
long *Load_File(char *Filename, int *Size);
int Save_File(char *Filename, long *Array, int Size);
void Shell_Insertion_Sort(long *Array, int Size, double *N_Comp, double *N_Move);
void Shell_Selection_Sort(long *Array, int Size, double *N_Comp, double *N_Move);
int Print_Seq(char *Filename, int Size);


int main()
{



long int  *Array[11];
 *Array[0]=9;
 *Array[1]=80;
 *Array[2]=4;
 *Array[3]=1;
 *Array[4]=5;
 *Array[5]= 3;
 *Array[6]= 7;
 *Array[7]=15;
 *Array[8]= 9;
 *Array[9]= 5;
 Shell_Selection_Sort(Array[10],11,0,0);
 /*
 int i = 0;
 for(i=0;i<=10;i++)
   {
     printf("%li\n",*Array[i]);
   }
 */
  return 0;
}

再次,我在终端中使用此命令进行编译:

gcc -Werror -Wall -Wshadow -O3 sorting.c sorting main.c -o proj1

我只收到 2 条警告说我还没有使用计算值(这是预期的)

然后我使用这个运行:

./proj1

有没有人看到我会在

中收到段错误的任何原因
#0  0x000000000040096b in Shell_Selection_Sort ()
#1  0x00000000004005d7 in main ()

我觉得这应该是一个简单的错误......

【问题讨论】:

    标签: c main


    【解决方案1】:

    您正在声明一个指针数组。

    要么声明一个数组,要么声明一个指针(如果你声明一个指针,你需要malloc一些内存)。

    在你的情况下,你应该声明一个数组。

    long Array[11];
    

    像这样存储元素

    Array[2]=4;
    Array[3]=1;
    

    long Array[11] 具有long *Array 的签名,因此它将与您正在调用的函数一起编译。

    现在对于那些double * 参数,您将不得不编写一些比较函数...

    【讨论】:

    • 哈哈哈我知道这将是一些我一开始就不应该犯的荒谬错误......谢谢!!!!指针仍然是我的一个痛点......
    • 另一个问题...我按照您的指示更改了数组定义。但是,我仍然有一个问题......我收到了同样的错误。是因为你提到的 double* 论点吗?在我设置它们之前,我能不能暂时将 0 传递给它们?
    • 那些不是指向双打的指针。它们是指向返回双精度的函数的指针。
    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多