Tag: 分段 故障

在C中的许多TQLI实现中是否存在错误?

用户Groo在这个问题的评论中发现,在南加利福尼亚大学高级计算和模拟合作实验室完成的C的TQLI实现中 ,存在一个非常基本的错误,即所有arrays都被视为一个 -根据。 虽然对我来说已经很奇怪,一个非常着名的机构会在其中一个代码中出现这样一个基本错误,但它让我更加困惑,基本上每个其他的TQLI算法实现和你可以在网上找到的相关tred2算法都能让同样的错误。 例子: TU Graz 斯坦福 这些不同的人真的有可能犯同样的错误,或者我错过了什么? 是否有一个版本的Carrays是基于1?

将指针打印到整数会导致分段错误。 为什么?

#include main() { int *num2=20; printf(“\n\n\n%d”,num2); } 当我按原样运行时,它打印20 。 如果我使用*num2 ,则会导致分段错误。 为什么?

如何修复分段错误11错误?

我希望main返回“dati”中出现“mdl”的位置。 我设置“schema”函数来查找每次出现的起点,但是当我从命令行运行程序时,它返回: Segmentation fault: 11 我不知道如何解决这个问题。 这是代码: #include #include #include #include int schema(int testo[], int nT, int modello[], int nM, int primo) { int i, j, k; static int r[12]; j=0; for(i=primo; i<nT; i++) { if(testo[i] == modello[0] && testo[i+1] == modello[1] && testo[i+2] == modello[2] && testo[i+3] == modello[3] && testo[i+4] == modello[4] && […]

SIGSEGV处理程序中的Segfault

让我们假设我有以下C代码: static void handler(int sig, siginfo_t *si, void *unused) { printf(“BOOM!\n”); //another segfault here exit(-1); } int main(int argc, char *argv[]) { struct sigaction sa; sa.sa_flags = SA_SIGINFO; sigemptyset(&sa.sa_mask); sa.sa_sigaction = handler; if (sigaction(SIGSEGV, &sa, NULL) == -1) perror(“failed to set handler”); // call other stuff here, somewhere in the callstack a segfault happens } […]

应该由C中的应用程序员编写分段故障处理程序吗?

如果某人是操作系统程序员或编写系统级库代码,则编写分段error handling程序是有意义的。 例如,OS程序员会编写代码,向该应用程序进程发送信号SIGSEGV。 或者系统库程序员可能会处理该信号SIGSEGV,并可能撤消由库代码引起的操作以创建分段错误。 但是为什么C中的应用程序员需要编写分段error handling程序? 如果他写了一个处理程序,他已经破坏了部分内存。 你能给一个实例,让应用程序员处理分段错误并继续执行程序吗?

Segfault来自添加变量

我当然是一个直接的C新手,但这让我很难过。 我正在研究实践的链表实现,我只是通过向split_node函数添加一个变量来获得段错误: #include #include #include struct Node { struct Node *child; char *content; }; void print_list(struct Node node); void split_node(struct Node *node, int position); int main() { struct Node head, second, third; head.content = “first”; second.content = “second”; third.content = “i’m third”; head.child = &second; second.child = &third; print_list(head); split_node(&head, 3); print_list(head); return 0; } […]

返回语句之前/期间的C分段错误

我在返回语句之前打印我正在返回的值,并告诉我的代码打印函数调用后立即返回的值。 但是,在我的第一个print语句之后和第二个print语句之前,我得到了一个分段错误(也有趣的是,这总是在第三次调用函数时发生;从不在第一次或第二次,从不第四次或以后)。 我尝试打印出我正在处理的所有数据,看看我的其余代码是否正在做某些事情,但也许不应该这样做,但到目前为止,我的数据看起来还不错。 这是function: int findHydrogen(struct Amino* amino, int nPos, float* diff, int totRead) { struct Atom* atoms; int* bonds; int numBonds; int i; int retVal; int numAtoms; numAtoms = (*amino).numAtoms; atoms = (struct Atom *) malloc(sizeof(struct Atom) * numAtoms); atoms = (*amino).atoms; numBonds = atoms[nPos].numBonds; bonds = (int *) malloc(sizeof(int) * numBonds); bonds = […]

为什么在这种特定情况下在堆栈上分配大元素不会失败?

在C中在堆栈上分配int和大数组时,程序执行时没有错误。 但是,如果我事先在堆栈上初始化变量,则会发生段错误(可能是因为大型数组超出了堆栈大小)。 如果在声明数组后初始化变量,这对我来说是有意义的。 是什么导致这种行为,记忆明智? 我的印象是,只需在堆栈上声明一个变量,就会分配所需的空间,导致在分配非常大的数据类型时立即崩溃。 我怀疑它与编译器优化它有关,但它没有意义,考虑到我在第二个例子中也没有改变foo 。 我正在使用gcc 7.2.0进行编译, 没有设置任何标志 。 在Ubuntu 17.10上执行。 这运行没有错误: int main(){ int i; unsigned char foo [1024*1024*1024]; return 0; } 这会立即崩溃: int main(){ int i = 0; unsigned char foo [1024*1024*1024]; return 0; } 有人能告诉我这里发生了什么吗?

C中退出代码11的含义是什么?

C中退出代码11的一般含义是什么? 我环顾四周,无法找到明确的答案,所以我想我会问这里。 当我尝试向向量添加元素时。

指针初始化给出了分段错误

我写了一个C程序如下: 情况1 int *a; /* pointer variable declaration */ int b; /* actual variable declaration */ *a=11; a=&b;/* store address of b in pointer variable*/ 它在运行程序时出现分段错误。 我更改了代码如下: 案例2 int *a; /* pointer variable declaration */ int b; /* actual variable declaration */ a=&b;/* store address of b in pointer variable*/ *a=11; 现在它工作正常。 如果有人知道请解释为什么它在CASE 1中给出了分段错误。