我有 32 位 C 应用程序(在 64 位系统上运行)泄漏内存。
调试它我已经从http://valgrind.org/downloads/下载了 valgrind 3.8.1 。做了 ./configure、make 和 make install 来安装 valgrind。
但是 valgrind 仅构建 64 位 memcheck-amd64-linux 二进制文件。32 位 memcheck 尚未构建。
结果我得到以下错误
# valgrind --tool=memcheck --time-stamp=yes -v --track-origins=yes --leak-check=yes /home/test_code32 --error-limit=no
valgrind: failed to start tool 'memcheck' for platform 'x86-linux': No such file or directory
Run Code Online (Sandbox Code Playgroud)
Stracing valgrind 给了我:
execve("/usr/local/lib/valgrind/memcheck-x86-linux", ["valgrind", "--tool=memcheck", "--time-stamp=yes", "-v", "--track-origins=yes", "--leak-check=yes", "/home/test_code32", "--error-limit=no"], [/* 60 vars */]) = -1 ENOENT (No such file or directory)
write(2, "valgrind: failed …Run Code Online (Sandbox Code Playgroud) 作为python的新手,我只是想弄清楚filter()和map()之间的区别。我编写了一个示例脚本,如下所示:
def f(x): return x % 2 == 0
def m(y): return y * 2
list = [1,2,3,4]
flist = filter(f, list)
print(list)
print(flist)
mlist = map(m, list)
print(list)
print(mlist)
Run Code Online (Sandbox Code Playgroud)
我们看到,对于过滤器和映射,我们都传递了一个列表,并将其输出分配给新列表。
该脚本的输出是
[1, 2, 3, 4]
[2, 4]
[1, 2, 3, 4]
[2, 4, 6, 8]
Run Code Online (Sandbox Code Playgroud)
问题是过滤器和映射的函数调用看起来相同,因此如果我们交换传递给它们的函数的内容,它们的行为将如何。
def f(x): return x * 2
def m(y): return y % 2 == 0
list = [1,2,3,4]
flist = filter(f, list)
print(list)
print(flist)
mlist = map(m, list)
print(list)
print(mlist)
Run Code Online (Sandbox Code Playgroud)
这导致
[1, 2, 3, …Run Code Online (Sandbox Code Playgroud) 我有一个适用于 Windows 平台的 C++ 应用程序。此应用程序创建 MAT 文件。目前我们仅支持 MATLAB 版本 4、5 和 7.3。我们希望添加对更高版本 MATLAB 的支持。
在.h(从https://sourceforge.net/projects/matio/下载)中,在 enum 中mat_ft,仅支持三个 MATLAB 版本:4、5 和 7.3。
enum mat_ft {
MAT_FT_MAT73 = 0x0200, /**< @brief Matlab version 7.3 file */
MAT_FT_MAT5 = 0x0100, /**< @brief Matlab version 5 file */
MAT_FT_MAT4 = 0x0010, /**< @brief Matlab version 4 file */
MAT_FT_UNDEFINED = 0 /**< @brief Undefined version */
Run Code Online (Sandbox Code Playgroud)
};
要在调用时创建 MAT 文件,Mat_CreateVer我们传递上面的枚举
pMat = Mat_CreateVer(matFileName.append(".mat").toLocal8Bit().data(), NULL, MAT_FT_MAT73);
Run Code Online (Sandbox Code Playgroud)
这对于 …
在ac程序中,我有一个long long int类型的变量,它存储一个值0x7fffffffffffffff.当我将此值除以1024*4时,它给出了2251799813685247,即0x7ffffffffffff.
现在,当我向后乘(1024*4)时,它会产生0x7ffffffffffff000.
即使我使用long long unsigned int类型的变量,结果也没有变化.代码在64位机器上运行.
为什么不导致0x7fffffffffffffff?
早些时候我有一个结构C.
typedef struct c
{
int cc;
}CS;
Run Code Online (Sandbox Code Playgroud)
我曾经调用一个库函数说int getData(CS*x),它返回了我带有数据的上述结构C.
GetData(CS *x)
Run Code Online (Sandbox Code Playgroud)
函数调用曾经像:
CS CSobj;
GetData(&CSObj);
Run Code Online (Sandbox Code Playgroud)
现在有两种结构,比如C和D.
typedef struct c
{
int cc;
}CS;
CS CSobj;
typedef struct d
{
int dc;
int dd;
}DS;
DS DSobj;
Run Code Online (Sandbox Code Playgroud)
函数GetData()已被修改为GetData(void*x).我必须调用库函数说int getData(void*x),它将通过void*paramter返回上述结构之一.函数的返回类型告诉返回哪个结构.
问题是在调用函数GetData()时如何以及要传递的参数,因为我不知道函数将返回哪个结构.有什么办法摆脱这个问题?
我有一个应用程序 rpm,安装时无法安装并出现错误
error: Failed dependencies:
libc.so.6 is needed by testSam-4.7.x86_64
libc.so.6(GLIBC_2.0) is needed by testSam-4.7.x86_64
libc.so.6(GLIBC_2.1) is needed by testSam-4.7.x86_64
Run Code Online (Sandbox Code Playgroud)
该系统具有 RHEL 7.3 和 glibc 2.17。
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
# rpm -qf /lib64/libc.so.6
glibc-2.17-157.el7.x86_64
Run Code Online (Sandbox Code Playgroud)
因此,使用较旧的 glibc(它需要 2.0 和 2.1 之间的 glibc)构建的应用程序无法在具有较新 glibc 2.17 的系统上运行。
如何摆脱这个问题并在具有较新 glibc 的系统上运行应用程序?我想有一些 glibc 向后兼容包可以帮助我们在具有较新 glibc 的系统上运行此类应用程序。从哪里可以下载此类兼容包?
我必须计算一个函数完成所需的时间。该函数被循环调用,我想找出总时间。通常,时间以纳秒或微秒为单位非常少。
为了找出经过的时间,我使用了使用gettimeofday()的函数(使用struct timeval)和使用clock_gettime()的函数(使用struct timespec)。
问题是按timeval返回的时间(以秒为单位)是正确的,但以微秒为单位是错误的。类似地,timespec返回的时间(以纳秒为单位)是错误的。从某种意义上说,它们与以秒为单位的返回时间不一致,这是错误的。
对于clock_gettime(),我同时尝试了CLOCK_PROCESS_CPUTIME_ID和CLOCK_MONOTONIC。使用clock()也无济于事。
程式码片段:
struct timeval funcTimestart_timeval, funcTimeEnd_timeval;
struct timespec funcTimeStart_timespec, funcTimeEnd_timespec;
unsigned long elapsed_nanos = 0;
unsigned long elapsed_seconds = 0;
unsigned long diffInNanos = 0;
unsigned long Func_elapsed_nanos = 0;
unsigned long Func_elapsed_seconds = 0;
while(...)
{
gettimeofday(&funcTimestart_timeval, NULL);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &funcTimeStart_timespec);
...
demo_func();
...
gettimeofday(&funcTimeEnd_timeval, NULL);
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &funcTimeEnd_timespec);
elapsed_seconds = funcTimeEnd_timeval.tv_sec - funcTimestart_timeval.tv_sec;
Func_elapsed_seconds+= elapsed_seconds;
elapsed_nanos = funcTimeEnd_timespec.tv_nsec - funcTimeStart_timespec.tv_nsec;
Func_elapsed_nanos+ = elapsed_nanos;
}
printf("Total time taken by demo_func() is %lu seconds( %lu nanoseconds )\n", …Run Code Online (Sandbox Code Playgroud) 在C逻辑AND运算符中,如果两个操作数都不为零,则只有条件变为真.
那么为什么
printf(">>>>>>>>>%d\n", ((4 == 0) && (5 != 6) || (6 != 7)));
Run Code Online (Sandbox Code Playgroud)
正在印刷
>>>>>>>>>1
Run Code Online (Sandbox Code Playgroud)