小编pr1*_*268的帖子

使用C++字符串可能发生内存泄漏

考虑以下C++程序:

#include <cstdlib> // for exit(3)
#include <string>
#include <iostream>
using namespace std;

void die()
{
    exit(0);
}

int main()
{
    string s("Hello, World!");
    cout << s << endl;
    die();
}
Run Code Online (Sandbox Code Playgroud)

通过valgrind运行这个显示了这个(一些输出为了简洁而修剪):

==1643== HEAP SUMMARY:
==1643==     in use at exit: 26 bytes in 1 blocks
==1643==   total heap usage: 1 allocs, 0 frees, 26 bytes allocated
==1643==
==1643== LEAK SUMMARY:
==1643==    definitely lost: 0 bytes in 0 blocks
==1643==    indirectly lost: 0 bytes in 0 blocks
==1643==      possibly lost: 26 …
Run Code Online (Sandbox Code Playgroud)

c++ string memory-leaks

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

&operator在函数指针赋值中可选

在以下代码中:

/* mylog.c */
#include <stdio.h>
#include <stdlib.h> /* for atoi(3) */

int mylog10(int n)
{
    int log = 0;
    while (n > 0)
    {
        log++;
        n /= 10;
    }
    return log;
}

int mylog2(int n)
{
    int log = 0;
    while (n > 0)
    {
        log++;
        n >>= 1;
    }
    return log;
}

int main(int argc, const char* argv[])
{
    int (*logfunc)(int); /* function pointer */
    int n = 0, log;

    if (argc > 1)
    {
        n = atoi(argv[1]); …
Run Code Online (Sandbox Code Playgroud)

c gcc function-pointers

8
推荐指数
4
解决办法
1701
查看次数

关于typedef中单实例数组的一些问题

我正在使用GNU Multi-Precision(GMP)库代码使用任意长度的整数来阅读一些代码.MP整数的类型mpz_t与gmp.h头文件中的定义相同.

但是,我对这个库定义mpz_t类型的低级定义有一些疑问.在标题代码中:

/* THIS IS FROM THE GNU MP LIBRARY gmp.h HEADER FILE */
typedef struct
{
    /* SOME OTHER STUFF HERE */
} __mpz_struct;

typedef __mpz_struct mpz_t[1];
Run Code Online (Sandbox Code Playgroud)

第一个问题:是否[1]__mpz_struct?换句话说,typedefmpz_t类型定义为__mpz_struct具有一次出现的数组?

第二个问题:为什么阵列?(为什么只出现一次?)这是我听说过的结构黑客之一吗?

第三个问题(可能与第二个问题间接相关):mpz_init_set(mpz_t, unsigned long int)函数的GMP文档说只使用它作为pass-by-value,尽管可以假设这个函数会在被调用函数中修改它的内容(因此需要pass-by-reference)语法.参考我的代码:

/* FROM MY CODE */
mpz_t fact_val;                /* declaration */
mpz_init_set_ui(fact_val, 1);  /* Initialize fact_val */
Run Code Online (Sandbox Code Playgroud)

单次出现数组是否允许自动传递引用(由于C中数组/指针语义的崩溃)?我很自然地承认我有点过分分析这个,但我当然喜欢对此进行任何讨论.谢谢!

c arrays struct typedef gmp

8
推荐指数
2
解决办法
815
查看次数

关于printf()long unsigned int和uint32_t的编译器警告

在我的C代码,我在fprintf荷兰国际集团一"%lu"和给予uint32_t的相应字段.但是,当我-Wall在GCC(版本4.2.4)中编译时,我收到以下警告:

writeresults.c:16: warning: format '%4lu' expects type 'long unsigned int', but argument 2 has type 
`uint32_t'
Run Code Online (Sandbox Code Playgroud)

是不是uint32_tlong unsigned int32位架构是一回事吗?在不消除-Wall编译器开关或使用类型转换(如果是,如何)的情况下,是否可以避免此警告?

是的,我仍在使用32位计算机/ arch/OS /编译器(目前太差,无法提供新的64位硬件).谢谢!

c linux printf gcc

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

标签 统计

c ×3

gcc ×2

arrays ×1

c++ ×1

function-pointers ×1

gmp ×1

linux ×1

memory-leaks ×1

printf ×1

string ×1

struct ×1

typedef ×1