Tag: 分段 错误

复杂正则表达式的分段错误 – Regex.h

我试图在一大块文本中找到URL regex_t reg; const char *regex=”REGEXGOESHERE”; regmatch_t matches[16]; //Read data into variable filecontent regcomp(&reg, regex, REG_EXTENDED); int offset=0; int j; int found=0; int start,end; while( regexec(&reg, filecontent+offset, 16, matches, 0) == 0) { printf(“\n\n”); start = matches[0].rm_so+offset; end = matches[0].rm_eo-1+offset; printf(“regex /%s/ at bytes %d-%d\n”, regex, start, end); for (j=start; j<=end; j++) { printf("%c",filecontent[j]); } […]

为什么我用这个C代码会出现分段错误?

这段代码给了我一个分段错误: char *s1 = “String 1”, *s2 = “String 2”; void swap(char **, char **); int main(void) { swap(&s1, &s2); return 0; } void swap(char **p, char **q) { char **tmp; *tmp = *p; *p = *q; *q = *tmp; } 但是,如果我将最后一个函数的主体更改为此代码,它不会产生任何问题: char *tmp; tmp = *p; *p = *q; *q = tmp; 我真的不明白为什么我的第一个代码出现了分段错误。 提前致谢。

字符串数组C的分段错误

我创建了一个程序,将一个字符串分成由空格分隔的标记,然后将每个单独的字符串复制到一个字符串数组中。 程序运行正常,直到它达到for循环,并在成功将第一个字符串添加到数组并打印它之后,程序崩溃。 我调试了它,发现了 args[i] = malloc((strlen(comm_str) + 1) * sizeof(char)); 返回SEGFAULT然后第二次执行循环。 同样调用堆栈打印出以下内容: 地址:75F943F9,function:strlen(),文件:C:\ Windows \ syswow64 \ msvcrt.dll。 我试图自己纠正程序,但没有结果。 我一开始认为循环尝试访问超出绑定区域,但我认为我已正确地对所有内容进行了malloc。 #include #include #include int main(){ char **args = NULL; char input[] = “cmdline -s 20 -r -t parameter -p 20 filename”; int num = 0; char *comm_str = strtok(input, ” “); /*Tokens command line*/ while(comm_str […]

调用isalpha导致分段错误

我有以下程序导致分段错误。 #include #include #include int main(int argc, char *argv[]) { printf(“TEST”); for (int k=0; k<(strlen(argv[1])); k++) { if (!isalpha(argv[1])) { printf("Enter only alphabets!"); return 1; } } return 0; } 我已经发现正是这条线导致了这个问题 if (!isalpha(argv[1])) { 用argv[1][k]替换argv[1] argv[1][k]解决了这个问题。 但是,我觉得很奇怪程序会导致分段错误,甚至没有打印TEST 。 我还期望isalpha函数错误地检查char*指针的低字节是否指向argv[1] ,但似乎并非如此。 我有代码来检查参数的数量,但为简洁起见,此处未显示。 这里发生了什么事?

C指针指针和seg错误

下面是我在C中的简单链接列表。我的问题是“headRef =&newNode;” 这会导致分段错误。 然后我尝试了“* headRef = newNode;” 这解决了seg故障问题。 虽然这两行代码在我看来以同样的方式工作,但为什么会导致seg错误而另一行不会? 提前致谢。 struct node{ int data; struct node* next; }; void Push(struct node** headRef, int data){ struct node* newNode = malloc(sizeof(struct node)); if(!newNode) return; newNode->data = data; newNode->next = *headRef; headRef = &newNode; return; }

在C中捕获段错误

我有一个程序,有时会从指针算术中发生段错误。 我知道这种情况发生了,但是我不能提前检查它是否是段错误 – 要么我可以“预扫描”输入数据以查看它是否会导致段错误(这是无法确定的),或者我可以修改它不使用指针算法,这将需要大量的工作,或者我可以尝试捕获段错误。 所以我的问题: 1)如何在C中捕获段错误? 我知道操作系统中的某些内容会导致段错误,但是如果C程序的Segmentation fault比仅仅Segmentation fault更优雅,那么它可以做些什么呢? 2)这有多便携? 我想这是一个非常不可移植的行为,所以如果你发布任何代码来捕获段错误,请告诉我它的工作原理。 我在Mac OS X上,但我希望我的程序可以在尽可能多的平台上工作,我想知道我的选择是什么。 并且不用担心 – 基本上我想要做的就是打印一个更加用户友好的错误消息并释放一些malloc() ed内存,然后死掉。 我不打算只是忽略我得到的所有段错误并继续前进。

分段错误但无法解释如何,内存分配对我来说很好看

我有一个节点,我正在定义其全局指针变量,如下所示: typedef struct node { char* word; struct node* next; } node; node* HashTable = NULL; node* HeadOfHashTable = NULL; 现在,我分配了如下内存: void allocateMemory(int numOfElements, bool isRealloc, const char* word) { if(!isRealloc) { printf(“Allocating %d blocks\n”, numOfElements); HashTable = malloc(sizeof(node*) * numOfElements); } else { printf(“Reallocating %d blocks for %s”, numOfElements, word); HashTable = realloc(HashTable, sizeof(node*) […]

为什么这个程序会出现分段错误?

这是一个初学者的问题:为什么这会打破/给出错误? #include #include #include char *strtrim_right(char *p) { char *end; int len; len = strlen( p); while (*p && len) { end = p + len-1; if(isalpha(*end)) *end =0; else break; } return(p); } int main () { char *x=”PM123BFD”; strtrim_right(x); printf(“%s”, x); return 0; }

尝试在C中打印值时出现分段错误

以下C代码返回“分段错误”错误。 我不明白为什么它不返回值20.我的错误是什么? #include int main() { int* n; *n = 20; printf(“%i\n”,*n); return 0; }

从函数返回指针

我试图从函数返回指针。 但我得到了分段错误。 有人请说出代码有什么问题 #include int *fun(); main() { int *ptr; ptr=fun(); printf(“%d”,*ptr); } int *fun() { int *point; *point=12; return point; }