가 이해가 안 컴파일하고 오류없이 실행 않습니다왜이 코드는이 코드를 컴파일하는 이유
#include <iostream>
#include <stdio.h>
#include <Eigen/Dense>
int
main (int argc, char *argv[])
{
typedef Eigen::Matrix<double, 5, 3/*FIXME: Should be 5*/> Matrix5;
Matrix5 test;
test << 2,0,0,1,1,
0,2,0,1,1,
0,0,2,2,2,
0,1,2,0,0,
0,1,1,0,0; // We filled a 5*5 matrix in a 5*3 matrix
//std::cout << "Test matrix:\n" << test << std::endl;
return (0);
}
이 내가 코드를 컴파일하는 방법입니다 다시 실행하면 세그멘테이션 오류가 발생합니다. 우분투 14.04에서 Eigen 3.2.0-8을 사용하고 있습니다.
권장 사항.
$ valgrind ./test_eigen
==12380== Memcheck, a memory error detector
==12380== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==12380== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
==12380== Command: ./test_eigen
==12380==
==12380==
==12380== HEAP SUMMARY:
==12380== in use at exit: 0 bytes in 0 blocks
==12380== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==12380==
==12380== All heap blocks were freed -- no leaks are possible
==12380==
==12380== For counts of detected and suppressed errors, rerun with: -v
==12380== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
valgrind를 실행할 때'cout'을 주석 처리 했습니까? 컴파일러는 오작동하는 코드를 최적화 할 가능성이 있습니다. – dasblinkenlight
Eigen의 표현 템플릿과 오버로드 된 연산자가 많이 사용 된 것으로 의심되는 이유는 valgrind가이 코드가 배열의 끝을 넘어서 씁니다. –