小编RKu*_*Kum的帖子

valgrind 不在 64 位机器上构建 32 位 rpm

我有 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)

valgrind

5
推荐指数
1
解决办法
7152
查看次数

filter()和map()之间的Python区别

作为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)

python

2
推荐指数
3
解决办法
6410
查看次数

对高于 7.3 的 MATLAB 版本使用 Mat_CreateVer

我有一个适用于 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)

这对于 …

matlab matio

2
推荐指数
1
解决办法
43
查看次数

变量溢出

在ac程序中,我有一个long long int类型的变量,它存储一个值0x7fffffffffffffff.当我将此值除以1024*4时,它给出了2251799813685247,即0x7ffffffffffff.

现在,当我向后乘(1024*4)时,它会产生0x7ffffffffffff000.

即使我使用long long unsigned int类型的变量,结果也没有变化.代码在64位机器上运行.

为什么不导致0x7fffffffffffffff?

c

0
推荐指数
1
解决办法
376
查看次数

C函数采用void*函数参数

早些时候我有一个结构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()时如何以及要传递的参数,因为我不知道函数将返回哪个结构.有什么办法摆脱这个问题?

c

0
推荐指数
1
解决办法
160
查看次数

应用程序 RPM 安装错误:libc.so.6 is required by ....

我有一个应用程序 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 的系统上运行此类应用程序。从哪里可以下载此类兼容包?

glibc rhel7

0
推荐指数
1
解决办法
1万
查看次数

C在C Linux中查找经过的时间

我必须计算一个函数完成所需的时间。该函数被循环调用,我想找出总时间。通常,时间以纳秒或微秒为单位非常少。

为了找出经过的时间,我使用了使用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 performance

-1
推荐指数
1
解决办法
1489
查看次数

C逻辑运算符查询

在C逻辑AND运算符中,如果两个操作数都不为零,则只有条件变为真.

那么为什么

printf(">>>>>>>>>%d\n", ((4 == 0) && (5 != 6) || (6 != 7)));
Run Code Online (Sandbox Code Playgroud)

正在印刷

>>>>>>>>>1
Run Code Online (Sandbox Code Playgroud)

c

-3
推荐指数
1
解决办法
71
查看次数

标签 统计

c ×4

glibc ×1

matio ×1

matlab ×1

performance ×1

python ×1

rhel7 ×1

valgrind ×1