2013-05-02 43 views
0

我要做的是:讀取x個字符串s_1 ... s_x的最大定義數。長度l = 1000000並存儲它們。變量x作爲輸入給出,並且表示應該是全局定義的。C:全局定義多維字符數組

我如何想做到這一點是:

  1. 全局定義指針字符指針:

    char** S; 
    
  2. 在當地,從輸入讀取X之後,對於x指針分配空間以char:

    S = (char**) malloc(sizeof(char*)*x); 
    
  3. 爲每個單個字符串在本地分配空間S_I和閱讀串入分配的空間:

    while(i<x){ 
        S[i] = (char*) malloc(sizeof(char)*1000000); 
        scanf("%s",S[i]); 
        i++; 
    } 
    

當我嘗試訪問

S[0][0] 

它給出了一個內存訪問錯誤。有任何想法嗎?謝謝!


編輯:

我打印的陣列和它的工作細所以這個問題是確實是在該訪問代碼。這裏是:任何人都可以看到問題是什麼?因爲我不能...

makeBinary(){ 

     printf("inside makeBinary()\n"); 

     S_b = malloc(sizeof(int)*1000000*x); 
     length = malloc(sizeof(int)*x); 
     int i; 
     int j; 
     for(i=0;i<x;i++){ 
      for(j=0;j<1000000;j++){ printf("1\n"); 
       if(S[i][j]=='\0'){ printf("2\n"); 
        length[i] = j; 
         break;     
       }else{ 
        S_b[i][j] = S[i][j]-96;  printf("3\n");  
       } 
      } 
     }  
    } 

它打印'1',然後它崩潰。我知道代碼遠不是最優的,但現在我只想首先解決問題。謝謝!

+0

不要投'malloc'的返回值(即實際上可能如果你沒有包含'')就是你的問題)。 S =(char **)malloc(sizeof(char *)* t);''t'這是一個錯字還是實際的代碼?如果是後者,那也可能是問題所在。 – 2013-05-02 20:50:32

+0

你可以顯示試圖訪問S [0] [0]的代碼嗎? – 2013-05-02 20:54:29

+0

爲什麼你明確地施加malloc的結果? – 2013-05-02 21:53:57

回答

0

有很多事情正在進行:
改變了奇怪的鑄造malloc的東西,但工作,但是icky。
此外,你不應該使用sprintf來複制內存... 我不會總是分配最大。
可以ALLOC正確的金額,strlen()+1 ...確保爲0墊到底...是這樣的:

int t = 100; 
char * buffer = malloc(sizeof(char*)*t); 
S = &buffer; 

for(int i = 0; i<10 ; i++){ 
    char * somestring = __FILE__; 
    size_t len = strlen(somestring); 
    S[i] = (char*) malloc(len+1); 
    S[i][len] = 0; 
    memcpy(S[i], somestring,len); 
} 
+0

Right在那裏我可以節省一些空間,謝謝! – 2013-05-03 09:11:20

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

char** S; 

int main(void){ 
    int i = 0, x = 100; 
    S = (char**) malloc(sizeof(char*) * x);//t --> x 

    while(i<x){ 
     S[i] = (char*) malloc(sizeof(char)*1000000); 
     if(S[i]==NULL){// check return of malloc 
      perror("memory insufficient"); 
      return -1; 
     } 
     scanf("%s",S[i]); 
     i++; 
    } 
    printf("%s\n", S[0]);//fine 
    printf("%c\n", S[0][0]);//fine 
    return 0; 
} 
+0

這不是一個分配問題,只是檢查它,但我打印它,它的工作原理,所以問題是在訪問中感謝您指出了我! – 2013-05-03 09:12:31