2016-12-07 9 views
-2

私はCプログラミングを初めて使用していて、変数xとyの値をFile1のmain関数で取得したコードを書き込もうとしました.c。ファイル内の他のすべての関数は、これらの変数の値を使用します。私はヘッダーファイルHeader.hでそれを宣言するために 'extern'キーワードを使用し、このヘッダーファイルはユーザーが入力したxとyの値も使用します。別のFile2.cもこれらの変数を使用します。 File1.cとFile2.cの両方にHeader.hが含まれていますソースファイルの定義中にヘッダファイルに "EXTERN"キーワードを使用

変数xとyをFile1.cのグローバル変数として定義しましたが、私は常にセグメンテーションフォルトを取得しています。私はどのように進めるべきですか?

EDIT:ここ はコードです:

#include<stdio.h> 
#include<Header.h> 
int x,y; 
int main() 
{ 
    uint16_t *Buffer_1 = (uint16_t *)malloc(sizeof(uint16_t) *x*y*256); 
    uint16_t *slice = (uint16_t *)malloc(sizeof(uint16_t)*x*y); 
    printf("Enter value of x:); 
    scanf("%d",&x); 
    printf("Enter value of y:); 
    scanf("%d",&y); 
    memcpy(slice,Buffer_1,x*y*sizeof(uint16_t)); 
} 

私はmemcpyのでセグメンテーションフォールトを取得します。次のように私はHEADER.HのY変数xを、宣言している:

#include <stdio.h> 
extern int x; 
extern int y; 
+2

コードを投稿してください。また、コールスタックまたはセグメンテーションが発生している場所を通知します。そうでなければ、あなたの説明に基づいてコードを想像し、解決策を提示することは非常に困難です。また、externキーワードがsegフォルトを引き起こしていないこともかなり確信で​​きます。 :) – Jay

+1

ジェイがお勧めしているように違反コードを投稿している間は、答えを出そうとする人たちができるように、[短く、自己完結型でコンパイルできる](http://sscce.org/)にしてくださいすぐに根本的な原因になる。 – ArjunShankar

+0

xとyの値を知った後に*を割り当てることを検討してください。 scanf()の戻り値は無視しないでください。 –

答えて

0

問題は、この意志、あなたがメモリを割り当てていると、後であなたがコピーのためにこれらのメモリを作っているときは、0に等しいxとyを持っているということですクラッシュする

あなたは

scanf("%d",&y); 

はまた、先に進む前に、NULLをチェックした後に割り当てる必要があります。

関連する問題