使用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.