Tag: segmentation fault

为什么我没有得到SIGSEGV?

我想了解这里发生了什么,更准确地说,为什么我在写入内存位置时没有收到分段错误,根据我的理解,没有分配。 假设我想定义一个int的二维数组( testptr )。 一维( 4 )静态分配(作为“数组”),第二维( 2 )动态分配(作为“指针”)。 // First dimension 4 rows static int *testptr[4]; for (i=0; i<4; i++) testptr[i] = calloc(2, sizeof(int)); // Second dimension 2 columns "dynamically" (in this example it is really just a constant) 现在我写信给一些地方: testptr[0][0] = 5; testptr[1][0] = 6; testptr[2][1] = 7; testptr[3][1] = 7; 以上所有我希望工作正常,因为它们在4×2“arrays”内。 现在我写一个不应该分配的位置: […]

segfault with array

关于数组我有两个问题: 第一个是关于以下代码: int a[30]; //1 a[40]=1; //2 为什么不是第2行给出segfault,它应该给出因为数组只分配了30个int空间,并且在其分配的空间之外的任何解除引用应该给出段错误。 第二:假设上面的代码有效,那么[40]有可能越过写,因为它没有来自arrray的保留范围。 提前致谢。

C中的分段错误与malloc

我在下面的场景中遇到了分段错误:当从文件中读取ip地址列表时,我将IP ADDRESS和端口存储在链接列表中。 因为我的文件读取循环重复自己,按照链接列表逻辑 – 当我再次malloc我的临时指针时,我面临分段错误。 请在下面找到代码段: struct woker_conf { int port; char *ip_address; struct worker_conf *next; } *head; void open(int8_t nbrwrk) { FILE *fp = NULL; char line[1024] = {0}; int i = 1; char *ch; struct worker_conf *config, *temp; head = NULL; fp = fopen(“abcd.txt”,”r”); if (fp == NULL) exit(1); while (fgets(line, sizeof line, […]

发现了分段错误,但之前的消息正在优化

我在GDB在线调试器中编写了以下代码: #include int main() { printf(“jkjkkjkj”); int p , n; FILE *fp; printf(“jkjkkjkj2”); fp = fopen(“abc.txt”,”r”); while ( (n = getc(fp))!= EOF) { printf( “the chareacter here is %d \n”, n); } n = fclose(fp); return 0; } 在执行代码时,我正在尝试从文件中获取字符的行中出现分段错误。 我知道由于文件不存在,分段错误错误即将来临。 然而,令我感兴趣的是没有我试图在屏幕上打印的消息。 我尝试检查调试器,一旦找到: optimized out written near the line no 但是,我尝试将getchar()置于此处,即使分段故障仍然存在,消息也会打印在屏幕上。 怎么解释这个? 为什么会这样? 当我将getchar()放在不同的地方时,为什么要打印消息? 我曾尝试在Solaris服务器上编写此代码并使用GCC进行编译。 代码已编译,但即使存在目录中提供的名称的文件,我也没有得到任何输出消息。

在C中打印char数组会导致分段错误

我做了很多搜索,找不到同样问题的任何问题。 这是我的代码: void fun(char* name){ printf(“%s”,name); } char name[6]; sscanf(input,”RECTANGLE_SEARCH(%6[A-Za-z0-9])”,name) printf(“%s”,name); fun(name); 该名称是从scanf抓取的,它首先打印出来。 然后,当调用fun时,在尝试打印名称时会出现分段错误。 为什么是这样?

指针和字符串导致分段错误

可能重复: char a [] =“string”有什么区别; 和char * p =“string”; char *str = “Hello”; printf(“%c”,++*str); 这使用gcc在linux上产生分段错误。 第一个语句改为as的那一刻 char str[10] = “Hello”; 有用。 可能是什么原因?

重复从Fortran调用C函数时出现分段错误

我有一个Fortran 90程序,它反复调用C函数。 第一次使用该函数一切顺利,但第二次代码尝试访问该函数时,它会出现以下错误: 程序接收信号SIGSEGV:分段故障 – 无效的存储器参考。 我在Windows上使用gfortran v.4.6,链接到我没有源代码的库。 该库作为DLL来到我身边,我使用gendef和dlltool来创建一个链接到的.a库。 代码如下: PROGRAM cmod USE, INTRINSIC :: ISO_C_BINDING INTERFACE LOGICAL (C_BOOL) FUNCTION clover(scen,reg,soil,top,rain,depth,numd,nums,numb, numd,addn,srate,stype,nloss,ploss,ErrStr) BIND (C, name = “ClOvr”) USE, INTRINSIC :: ISO_C_BINDING INTEGER (C_INT), INTENT(IN), VALUE :: scen,reg,soil,topo,depth REAL (C_DOUBLE), INTENT(IN), VALUE :: rain,numd,nums,numb,numd REAL (C_DOUBLE), INTENT(IN), VALUE :: addn,srate INTEGER (C_INT), INTENT(IN), VALUE :: stype […]

无法在C中创建shell(Seg-Fault和ferror)

我一直在关注如何制作自己的shell的教程,但我已经被困了几天了。 两件事情: 编译和运行此代码时,它将随机出现分段错误,我无法弄清楚原因。 if语句`if(ferror!= 0)`似乎总是如此。 这很奇怪,因为我不明白为什么fgets()在main()函数中失败了。 有关这些主题的任何信息(或有关创建此shell的其他主题)将不胜感激。 #include #include #include #include #define MAXSIZE 512 int parseCmd(char *cmd, char *args[]) { printf(“LOGGER: parseCmd(cmd=%s, args=%p)\n”, cmd, args); char cmdDelims[] = {‘ ‘,’>’}; char *cmdReader; cmdReader = strtok(cmd, cmdDelims); int i = 0; while (cmdReader != NULL) { args[i] = strdup(cmdReader); printf(“LOGGER: args[%d]=%s\n”, i, args[i]); cmdReader = strtok(NULL, […]

strcmp()的分段错误

if(strcmp(argv[2], NULL) == 0) 我传递了3个命令行参数,但我也想用上面的语句只用2个命令行参数来运行它。 但是正在显示分段错误错误。 我也尝试过 if(argc < 3) 但它也没有用……同样的分段错误……

来自SDL_FreeSurface的奇怪段错误

我有以下简单的SDL代码: #include #include #include // helpers bool init(SDL_Window **win, SDL_Surface **surf) { int const width = 800; int const height = 600; if (SDL_Init(SDL_INIT_VIDEO) != 0) { fprintf(stderr, “Unable to init SDL: %s\n”, SDL_GetError()); return false; } *win = SDL_CreateWindow(“Picture test”, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, 0); if (*win == NULL) { fprintf(stderr, “Unable to create […]