小编Joh*_*der的帖子

为什么pthread导致内存泄漏

每当我创建一个pthread时,valgrind就会输出内存泄漏,

例如下面的代码:

#include <stdio.h>
#include <unistd.h>
#include <pthread.h> 

void *timer1_function (void *eit){
  (void) eit;
    printf("hello world\n");
    pthread_exit(NULL);
}

int main(void){
   pthread_t timer1;
   pthread_create( &timer1, NULL, timer1_function,  NULL);  ///////line13
   int i=0;
   for(i=0;i<2;i++){usleep(1);}
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

valgrind输出

==1395== HEAP SUMMARY:
==1395==     in use at exit: 136 bytes in 1 blocks
==1395==   total heap usage: 6 allocs, 5 frees, 1,134 bytes allocated
==1395== 
==1395== 136 bytes in 1 blocks are possibly lost in loss record 1 of 1
==1395==    at 0x402A629: calloc (in …
Run Code Online (Sandbox Code Playgroud)

c valgrind posix memory-leaks pthreads

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

尽量使用功能好吗?

当我阅读开源代码(Linux C代码)时,我看到很多函数被用来代替执行所有操作main(),例如:

int main(void ){
    function1();
    return 0;
}

void function() {
    // do something
    function2();
}

void function2(){
    function3();
    //do something
    function4();
}

void function3(){
    //do something
}
void function4(){
    //do something
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我尽可能多地使用函数的优点和缺点吗?

  • 易于添加/删除功能(或新操作)
  • 代码的可读性
  • 源效率(?),因为函数中的变量将被销毁(除非动态分配完成)
  • 嵌套函数会减慢代码流吗?

c linux function

15
推荐指数
1
解决办法
377
查看次数

何时使用#define或constant char/int?

在一般情况下,是能够更好地定义一些特定的参数(例如(char *) UserIPaddr="192.168.0.5", (int) MAX_BUF=1024通过)#defineconstant char */ int

我读了一些帖子说最好不要在#define可能的时候使用.但是,我从#define源代码的一个例子中看到了开源代码的常见用法:

#define IEEE80211_WLAN_HDR_LEN      24
    a_uint8_t *iv = NULL;
    a_uint16_t tmp;
    a_uint16_t offset = IEEE80211_WLAN_HDR_LEN;
Run Code Online (Sandbox Code Playgroud)

#define可以避免在那里使用,但我想知道为什么在这种情况下使用#define是优选的.我该如何决定何时使用#define

c constants c-preprocessor

6
推荐指数
1
解决办法
847
查看次数

valgrind条件跳转或移动取决于未初始化的值

我有下面的代码,通过填充0作为前缀将IP地址修复为15位.

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h> 

char *function(char *newhost){
     char *IPaddr;
     IPaddr = (char *)calloc(16, sizeof(char));

    size_t i=0 , j= 0;
    for(i=0, j=0; j<15; i++, j++){
        if((newhost[strlen(newhost)-(i+1)] == '.')){   //////////line 11
            if( j == 3 || j == 7 || j == 11){
                IPaddr[14-j] = '.';
            }else if(j<3){
                while(!(j==3)){
                    IPaddr[14-j]='0';
                    j++;
                }
                IPaddr[14-j] = '.';
            }else if(j > 3 && j<7){
                while(!(j==7)){
                    IPaddr[14-j]='0';
                    j++;
                }
                IPaddr[14-j] = '.';
            }else if(j>7 && j<11){
                while(!(j==11)){
                    IPaddr[14-j]='0';
                    j++;
                }
                IPaddr[14-j] …
Run Code Online (Sandbox Code Playgroud)

c debugging valgrind

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

AVR:如果声明

我是AVR编程的新手.uint8_t received_msg如果它等于,我想控制一个变量()0xFF.这样做是否正确:

if (!(received_msg ^ 0xFF))
Run Code Online (Sandbox Code Playgroud)

或者我需要逐点比较

    uint8_t test = 0;
    test = received_msg ^ 0xFF 
    for (i =0; i<8; i++){
     test = 0 & (1<<received_msg)
    }
    if(test==0)
Run Code Online (Sandbox Code Playgroud)

c avr

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

为什么涉及指数的C计算会产生错误的答案?

我试图在C上实现以下公式

在此输入图像描述

这是我的代码:

int function(int x){
   return pow(10, (((x-1)/(253/3))-1));
}

int main(void){
  int z = function(252);
  printf("z: %d\n",z); 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它输出10.但计算器输出94.6.

谁能解释一下我做错了什么?

c math

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

如何在静态函数中使用静态向量

我正在尝试使用vector<int> myVector2,但是,在static function (foo). 我使用 Qt,下面是默认代码:

   Mainwindow.h
---------------------------------------------------
#include <QMainWindow>
#include <vector>
#include <iostream>
#include <QString>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    static std::vector<int> myVector2;
    static void foo();
private:
    Ui::MainWindow *ui;

};
Run Code Online (Sandbox Code Playgroud)

……

mainwindow.cpp
------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    foo;

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::foo(){
    MainWindow::myVector2.push_back(3);

}
Run Code Online (Sandbox Code Playgroud)

我刚刚添加static std::vector<int> myVector2; …

c++ qt static-members

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