使用gdb查找memcpy错误
以下代码中的错误是使用gdb查找memcpy错误,c,gdb,core,C,Gdb,Core,以下代码中的错误是memcpy(t[j],m[j],sizeof(int)*DIM*DIM)应该是memcpy(t[j],m[j],sizeof(int)*DIM): 在我该怎么做之后?您不能总是通过这种方式找到真正的错误,但您可以找到分段冲突发生的位置 您需要使用调试信息编译程序,最好不要进行优化,即使用-ggdb-O0编译标志。如果冲突发生在库函数中,如示例中所示,请使用gdb命令up向上移动调用堆栈,直到到达代码。然后,您应该会看到程序中有问题的一行 确保gdb可以找到您的来源。通常,当当
memcpy(t[j],m[j],sizeof(int)*DIM*DIM)代码>应该是memcpy(t[j],m[j],sizeof(int)*DIM)代码>:
在我该怎么做之后?您不能总是通过这种方式找到真正的错误,但您可以找到分段冲突发生的位置
您需要使用调试信息编译程序,最好不要进行优化,即使用-ggdb-O0
编译标志。如果冲突发生在库函数中,如示例中所示,请使用gdb
命令up
向上移动调用堆栈,直到到达代码。然后,您应该会看到程序中有问题的一行
确保gdb
可以找到您的来源。通常,当当前目录是构建目录时,gdb
可以找到它们。如果没有,请使用gdb的directory
命令您不能真正使用gdb来查找此类错误。我建议您改用。相关:
// Untitled7.c
#include <stdio.h>
#include <string.h>
#define DIM 1000
int main(void)
{
int m[DIM][DIM], t[DIM][DIM];
unsigned j, k;
for(j = 0; j < DIM; j++)
for(k = 0; k < DIM; k++)
m[j][k] = j * DIM + k;
for(j = 0; j < DIM; j++)
memcpy(t[j] ,m[j], sizeof(int) * DIM * DIM); // only one DIM
for(j = 0; j < DIM; j++)
for(k = 0; k < DIM; k++)
m[j][k] = t[DIM-k-1][j];
return 0;
}
...
Reading symbols from Untitled7...done.
[New LWP 10610]
Core was generated by ` ? @ A'. // and symbols of binary files
Program terminated with signal SIGSEGV, Segmentation fault.
#0 __memcpy_ssse3 () at ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:2590
2590 ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S: File o directory non esistente. // File or directory not existent.