2016-12-07 12 views
-2

Я новичок в программировании на С и пытался написать код, в котором значения переменных x и y берутся у пользователя в основной функции File1 .c. Все остальные функции в файле используют значение этих переменных. Я использовал ключевое слово 'extern', чтобы объявить его в Header-файле Header.h, и этот заголовочный файл также использует значения 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)); 
} 

Я получаю ошибку сегментации при тетсре. Я предрек переменные х, у в header.h следующим образом:

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

Пожалуйста, внесите ваш код. Кроме того, разместите столбец или место, где происходит segfault. Кроме того, очень сложно представить код, основанный на вашем описании, и дать решение. Кроме того, вы можете быть уверены, ключевое слово extern не вызывает ваши ошибки seg. :) – Jay

+1

И пока вы публикуете оскорбительный код, как рекомендует Джей, попробуйте сделать его [«коротким, автономным и компилируемым»] (http://sscce.org/), чтобы те, кто пытался ответить, могли быстро дойдете до основной причины. – ArjunShankar

+0

Рассмотрите возможность выделения памяти * после * вы знаете значение x и y. И никогда не игнорируйте возвращаемое значение scanf(). –

ответ

0

Проблема заключается в том, что у вас есть х и у равно 0, когда вы выделение памяти, а затем вы делаете эту память для копирования, это будет приводят к сбою.

Вам нужно выделить после

scanf("%d",&y); 

Также проверьте значение NULL, прежде чем продолжить.