9

何らかの理由で、プログラムをコンパイルしようとすると、コンパイラは許可が拒否され、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.");        
                 }
   }
}

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

4

11 に答える 11

14

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

于 2013-07-18T08:17:45.720 に答える
5

これは、プログラムを再コンパイルする前に実行中のプログラムのインスタンスを閉じなかったことが原因であると確信しています。

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

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

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

これで、3 番目のポイントに到達します。Windows では、使用中のファイルへの書き込みが許可されていないため、プログラムの実行中のインスタンスはld.exe、新しいリンクされたプログラムをファイルに書き込むことができないことに注意してください。

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

于 2017-11-16T13:59:46.707 に答える
-3

main{....私はメインを開始するときにint main{を使用します。

于 2013-11-20T23:55:22.173 に答える
-3

私はそのような問題に悩まされていたので、この回答は C++ 開発者向けに書かれています。解決策は次のとおりです。

それ以外の

main()
{

}

入力してください

int main()
{

}

したがって、メイン関数を実行できます。

ちなみに、実行するメイン関数がない C/C++ ソース ファイルをコンパイルすると、次のようなバグ メッセージが表示されます。

「[エラー] Id が 1 の存在ステータスを返しました」

ただし、ファイルに main 関数が必要ない場合もあります。そのような場合は、バグ メッセージを無視してください。

于 2016-03-24T02:05:50.490 に答える