web-dev-qa-db-ja.com

Cコンパイルエラー:IDが1つの終了ステータスを返しました

何らかの理由で、プログラムをコンパイルしようとすると、コンパイラーは許可が拒否され、Idは1つの終了ステータスを返したと言います。誰がそれが意味することを教えてもらえますか?ありがとうございました

#include <stdio.h>                                               /* Library inclusions */
#include "genlib.h" 
#include "simpio.h"

int binSearch(int val, int numbers[], int size1);                /* prototypes */
void sortArray (int numbers[], int size1);                       
int indexMax (int numbers[], int low, int high);
void swap (int numbers[], int loc, int loc1);
void getArray (int numbers[], int size1);
void displayArray (int numbers[], int size1);

main()
{
  int value, size1;

  printf("Enter the number of elements: ");
  size1=GetInteger(); 
  int numbers[size1];
  getArray(numbers, size1); 
  sortArray(numbers, size1); 
  displayArray(numbers, size1);
  printf("\nEnter value to find: ");
  value=GetInteger();
  binSearch(value, numbers, size1);
  getchar();
}

void sortArray (int numbers[], int size1)                        /*Function sortArray*/
{
 int i , maxInd;

 for (i= size1-1; i>=0;i--)
 {
     maxInd=indexMax(numbers, 0, i);
     swap (numbers, i, maxInd);
 }
}

void displayArray (int numbers[], int size1)                     /*Function displayArray*/
{
 int i;

 printf("This is the sorted set of numbers: \n");
 for (i=0; i< size1; i++)
 {
         printf ("%d\t", numbers[i]); 
     }
}

void getArray (int numbers[], int size1)                         /*Function getArray*/
{
 int i;

 for (i=0; i<size1; i++)
 {
     printf ("Enter the values of the %d elements: ", size1);
     numbers[i]=GetInteger();
 }
}

int indexMax (int numbers[], int low, int high)                  /*Function indexMax*/
{
int i, maxInd;

maxInd=high;
for (i=low;i<=high;i++)
{
    if (numbers[i]>numbers[maxInd]) 
    {
                   maxInd =i;
    }
    }
    return (maxInd);
}

void swap (int numbers[], int loc, int loc1)                     /*Function swap*/
{
 int temp;

 temp=numbers[loc];
 numbers[loc]=numbers[loc1];
 numbers[loc1]=temp;
}

int binSearch(int val, int numbers[], int size1)                 /*Function binSearch*/
{
 int low, high, mid;

 low=0;
 high=size1-1;
 while(low<=high)
 {
                 mid=(low+high)/2;
                 if(val<numbers[mid])
                 {
                                 high=mid-1;                
                 }            
                 else if(val>numbers[mid])
                 {
                                 low=mid+1; 
                 }   
                 else if(val==numbers[mid])
                 {
                                 printf("Your number is in location %d\n", mid+1);break;    
                 } 
                 else
                 {
                                 printf("Your value is not in the array.");        
                 }
   }
}

上記は、私がコンパイルしようとしたバイナリ検索アルゴリズムのコードです。

あなたのプログラムの古いインスタンスはまだ実行中です。 Windowsでは、現在「使用中」のファイルを変更することはできず、リンカーは実行中のファイルの上に新しい.exeを書き込むことができません。プログラムを停止または強制終了してください。

9
Kane

Code :: blocksを使用して、このエラーを解決しました:

ワークスペースのプロパティ>ビルドターゲット>ビルドターゲットファイル

すべてのプロジェクトファイルをチェックします。

0
bb8

確かに、これは再コンパイルを試みる前にプログラムの実行中のインスタンスを閉じなかったためであるためです。

一般的に、ld.exeは、必要なファイルにアクセスできない場合に1を返します。これには通常以下が含まれます

  • リンクするオブジェクトファイルが見つかりません(またはAccess denied
  • リンクする1つ以上のシンボルが見つかりません
  • 書き込み(またはAD)のために実行可能ファイルを開けません

プログラムは完全に正常に見えるため、2番目のポイントはヒットしません。通常、ldがオブジェクトファイルのオープンに失敗することは不可能です(ドライブに障害があり、ファイルシステムが汚れていない限り)。そのため、最初のポイントもほぼ不可能です。

次に、3番目のポイントに進みます。 Windowsは使用中のファイルへの書き込みを許可しないなので、プログラムの実行中のインスタンスがld.exe新しいリンクプログラムの書き込みから。

したがって、次回はコンパイルする前に実行中のプログラムを必ず閉じてください。

0
iBug

別のプログラムがバックグラウンドで実行されている間に、プログラムをコンパイルできます。まず、別のプログラムが実行されているかどうかを確認します。それを閉じてから、roコンパイルを試みます。

0
user9110380

プログラムをコンパイルしながら「gcc filename.c -lm」を試してみてください...

0