2012-05-03 11 views
0
#include<stdlib.h> 
#include<stdio.h> 

/* 

Content of Text FILE 

5  // no_of_process 
4  // no_of_resource_type 
6 3 4 2 // vector E matrix 
3 0 1 1 // 5x4 matrix 
0 1 0 0 
1 1 1 0 
1 1 0 1 
0 0 0 0 

*/ 


int main() 
{ 
    FILE *file; 
    int no_of_process; 
    int no_of_resource_type; 
    int *vector_E; 
    int **C; 
    int counter = 1, i, k; 
    char unwanted[50]; 

    file = fopen("file_path\\file.txt", "r"); 
    if(file == NULL){ 
     printf("NO SUCH A FILE EXISTS!!!"); 
     exit(1); 
    } 


    while(!feof(file)) 
    { 
     if(counter == 1){ 
      fscanf(file, "%d", &no_of_process);   // The number of process is set 
      fscanf(file, "100[^\n]", unwanted);   // put in "unwanted" the un wanted chars untill you get \n 
      counter++;         // counter for selecting operation type 
      printf("\nProcess: %d", no_of_process); 
     } 

     else if(counter == 2){ 
      fscanf(file, "%d", &no_of_resource_type); // The number of resource type is set 
      fscanf(file, "100[^\n]", unwanted);   // put in "unwanted" the un wanted chars untill you get \n 
      counter++;         // counter for selecting operation type         
      printf("\nType: %d\n", no_of_resource_type); 
     } 

     else if(counter == 3){ 
      vector_E = (int *)malloc(sizeof(int)*no_of_resource_type); // Allocating memory for vector_E of size # of resource type 

      for(i=0; i<no_of_resource_type; i++){      // fillling vector_E array 
       fscanf(file, "%d", &vector_E[i]); 
       printf("%d ", vector_E[i]); 
      }       
      fscanf(file, "100[^\n]", unwanted);       // put in "unwanted" the un wanted chars untill you get \n 
      counter++;             // counter for selecting operation type 
      printf("\n");             
     } 

     else if(counter == 4){ 
      C = (int**)malloc(sizeof(int *)*no_of_process);    // Allocating memory for Current Allocation Matrix "part1" 


      for(i=0; i<no_of_resource_type; i++)      // Allocating memory for Current Allocation Matrix "part2" 
       C[i] = (int *)malloc(sizeof(int)*no_of_resource_type); 


      for(i=0; i<no_of_process; i++){        // Filling the Current Allocation Matrix 
       for(k=0; k<no_of_resource_type; k++){ 
        fscanf(file, "%d", &C[i][k]); 
        printf("%d ", C[i][k]); 
       } 
       printf("\n"); 

       // -------------------------------------------------------------------- ??????????? 
       // Problem is here !!!!! 
       // --------------------------------------------------------------------- ??????????? 

       fscanf(file, "100[^\n]", unwanted);      // put in "unwanted" the un wanted chars untill you get \n 

      } 
     } 
    } 


    printf("# of Process: %d\n", no_of_process); 
    printf("# of Resource Type: %d\n", no_of_resource_type); 

    printf("Vector E\n"); 
    for(i=0; i<no_of_resource_type; i++) 
     printf("%d ", vector_E[i]); 

    printf("\nCurrent Allocation Matrix\n"); 
    for(i=0; i<no_of_process; i++){ 
     for(k=0; k<no_of_resource_type; k++){ 
      printf("%d ", C[i][k]); 
     } 
     printf("\n"); 
    } 


    system("pause"); 
    return 0; 
} 

タスクは、txtファイルから数値を読み取ることです。 no_of_process、no_of_resource_type、およびvector_E行列の読み込みに問題はありません。この問題は、プログラムが "5x4マトリックス"の4行目を読み込み、 "プログラムで発生したアクセス違反(セグメンテーションフォルト)"エラーが発生した場合に発生します。問題が発生した行に「Problem is here !!!」とマークしました。Cプログラミングエラー:.txtファイルからの読み取り

誰かがこの問題の原因と解決方法を説明できますか?まあ

答えて

1
  C = (int**)malloc(sizeof(int *)*no_of_process); 
     for(i=0; i<no_of_resource_type; i++) 
      C[i] = (int *)malloc(sizeof(int)*no_of_resource_type); 

、あなたは「no_of_process」int型のポインタのために多くのスペースを割り当てるが、その後にループのためにあなただけの「no_of_resource_type」行を割り当てます。したがって、forループを

に変更してください。
  for(i=0; i<no_of_process; i++) 
+0

問題が解決しました。どうもありがとう。 – Encinaar

関連する問題