【问题标题】:Use of "EXTERN" Keyword in header file while its definition in source file在头文件中使用“EXTERN”关键字,而在源文件中定义
【发布时间】:2016-12-07 11:24:41
【问题描述】:

我是 C 编程新手,正在尝试编写代码,其中变量 x 和 y 的值取自 File1.c 主函数中的用户。文件中的所有其他函数都使用这些变量的值。我在头文件 Header.h 中使用了“extern”关键字来声明它,这个头文件也使用了用户输入的 x 和 y 的值。另一个 File2.c 也使用了这些变量。 File1.c 和 File2.c 都包含 Header.h

我在 File1.c 中将变量 x 和 y 定义为全局变量,但我经常遇到分段错误。我应该如何进行?

编辑: 代码如下:

#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 中声明了变量 x,y 如下:

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

【问题讨论】:

  • 请发布您的代码。另外,发布调用堆栈或发生段错​​误的位置。否则,很难根据您的描述想象代码并给出解决方案。此外,您可以相当肯定, extern 关键字不会导致您的段错误。 :)
  • 当您按照 Jay 的建议发布违规代码时,请尝试将其设为 "short, self-contained, and compile-able",以便那些尝试回答的人可以快速找到根本原因。
  • 在你知道 x 和 y 的值之后考虑分配内存。并且永远不要忽略 scanf() 的返回值。
  • 谢谢。这解决了问题。我没有意识到这可能是个问题,并认为 extern 会是个问题。
  • EXTERN 不是关键字,但 extern 是。

标签: c global extern


【解决方案1】:

问题是你在分配内存时 x 和 y 等于 0,然后你将这些内存用于复制,这将导致崩溃。

你需要在之后分配

scanf("%d",&y);

在继续之前还要检查 NULL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多