每当我创建一个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) 当我阅读开源代码(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)
你能告诉我尽可能多地使用函数的优点和缺点吗?
在一般情况下,是能够更好地定义一些特定的参数(例如(char *) UserIPaddr="192.168.0.5", (int) MAX_BUF=1024通过)#define或constant 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?
我有下面的代码,通过填充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) 我是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上实现以下公式

这是我的代码:
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.
谁能解释一下我做错了什么?
我正在尝试使用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; …