2016-09-18 16 views
0

私はsegフォルトが発生し続けていますが、なぜ誰かがこれで私を助けることができればそれはすばらしいでしょう。私はしかし、「アウトを得ることはありません、最初の4つのループCプログラムのセグメンテーションフォルト(構造体を使用)

の終わりまですべての印刷状態を取得............ここ

をエラーを見つけることができませんセット障害が

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

void getWords(int arg, char** argWords, Words* words); 

void getWords(int arg, char** argWords, Words* words) 
{ 
    printf("In Method\n"); 

    int ewm=1; 
    for(ewm =1 ; ewm<= arg; ewm++){ 
     int tempr = (strlen(argWords[ewm]) +1); 
     printf("tempr: %d\n", tempr); 
     words->numWords = words->numWords + tempo; 
     printf("numWords: %d\n", words->numWords); 
     printf("in\n"); 
    } 


    printf("out\n"); 
    printf("%d\n", words->numWords); 
    int x = 1; 
    int y = 0; 

    printf("four loop\n"); 
    for(x= 1; x<=arg; x++){ 
     printf("SIZE: %d\n", (strlen(argWords[x])+1)); 
     char* temp = malloc(strlen(argWords[x])+1); 
     printf("%s\n", argWords[x]); 
    } 
} 

//*****************************// 
int main(int argc, char** argv){ 

    if(argc == 0){ 
     printf("Please input a value/n"); 
     return 1; 
    } 

    Words *currWords = malloc(sizeof(Words)); 
    printf("Mem located\n"); 

    getWords(argc, argv, currWords); 

    return 0; 
} 
+1

:で

同じ問題? – Raman

+1

コードをフォーマットして読めるようにしてください。 –

+0

'for(ewm = 1; ewm <= arg; ewm ++){ int tempr =(strlen(argWords [ewm])+1); printf( "tempr:%d \ n"、tempr); words-> numWords = words-> numWords + tempo; ''テンポ 'とは何ですか?コードはコンパイルされますか?また、構造タイプ「単語」はどのように定義されていますか?また、C配列は通常インデックス0から始まります。通常、あなたが書いたものではなく、 'for(ewm = 0; ewm

答えて

2

argが「print文,,厥はargWords内の要素の数であるので、アレイの境界のうちgetWords機能アクセスから次のコード

for(x= 1; x<=arg; x++) 
{ 
    printf("SIZE: %d\n", (strlen(argWords[x])+1)); // <--- 
    char* temp = malloc(strlen(argWords[x])+1);  // <--- 

argWords[x]にアクセスすると、予期しない動作が発生します。適切な上限はx < argです。 `Words`ものです

for(ewm =1 ; ewm<= arg; ewm++) // <--- here must be ewm < arg 
{ 
    int tempr = (strlen(argWords[ewm]) +1) 
関連する問題