标签: valgrind

C++使用std :: set并获得分段错误D:

我不知道我在valgrind中的错误报告告诉我的是什么......但这是我的代码中与该问题相关的部分:

template<typename T>
struct CompareEvents {
public:
    bool operator()(const T a, const T b) const {
        return a.time < b.time ? true : false;
    } 
};


class EventManager {
public:
    void EventManager::SendEvent(int delay, size_t sender, size_t receiver, size_t eventId) {
        if (delay > 0) {
            eventQueue.insert(Event((GetTime() + delay), sender, receiver, eventId));  //line 55
        }
    }
private:
    std::set<Event, CompareEvents<Event>> eventQueue;
}
Run Code Online (Sandbox Code Playgroud)

事件只是一个简单的结构,它有四个参数(时间,发送者,接收者和ID).

从我的测试类调用SendEvent导致一个可爱的seg错误......看起来像这样(valgrind):

==998== Invalid read of size 8
==998==    at 0x40D544: std::_Rb_tree<Event, Event, std::_Identity<Event>, CompareEvents<Event>, std::allocator<Event> >::_M_begin() (stl_tree.h:493)
==998==    by …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind set segmentation-fault

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

调用不同函数时,通过堆分配创建未初始化的值

代码如下:

Board* constructBoard(int dimension)
{
    //Allocate memory for board
    Board *board = malloc(sizeof(Board));
    if(!board)
    {
        return NULL;
    }
    //Allocate memory for matrix
    board->matrix = malloc(dimension * sizeof(int*));
    if(!board->matrix)
    {
        freeBoard(board);
        return NULL;
    }
    //Allocate memory for each row of matrix
    for(int row = 0; row < dimension; row++)
    {
        // Following line is line 29 from error below  <---------------------------
        board->matrix[row] = malloc(dimension * sizeof(int));  
        if(!board->matrix[row])
        {
            freeBoard(board);
            return NULL;
        }
        board->dimension = row +1;
    }
    board->value = 0;
    return board; …
Run Code Online (Sandbox Code Playgroud)

c malloc valgrind

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

C++ 内存泄漏。Valgrind - 不匹配的删除

我从线程 #1 接收对象 - 它是第 3 方库代码 - 我的回调调用了它。

对象具有固定长度的字符串字段:

typedef struct somestr_t {
    char * Data;
    int    Len; } somestr_t;
Run Code Online (Sandbox Code Playgroud)

每次我都必须手动创建对象的副本,然后才能将其进一步传递给我的代码。因此,除其他外,我也使用这个助手复制这些字符串:

inline void CopyStr(somestr_t * dest, somestr_t * src)
{
    if (src->Len == 0) {
        dest->Len = 0;
        return;
    }

    char* data = new char[src->Len];

    memcpy(data, src->Data, src->Len);

    dest->Data = data;
    dest->Len = src->Len;
}
Run Code Online (Sandbox Code Playgroud)

然后我删除该对象及其字符串字段:

if (someobj != nullptr)
{
    if (someobj ->somestr.Len != 0) delete someobj ->somestr.Data;
    . . .
    delete someobj ;
}
Run Code Online (Sandbox Code Playgroud)

当我运行时, …

c++ linux valgrind memory-leaks

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

以下C代码中的内存泄漏

我如何从他的代码中释放泄漏的内存.

struct object_one{
  int value;
}*object,object_node;

struct node_one {
  void **pointers;

}*node, node_node;

  node sample(){
  object number;
  node node123;
  node123 = malloc(sizeof(node_node));
  number = malloc(sizeof(object_node));
  number->valu = malloc(sizeof(int));
  number->value = 9;
  node123->pointers[0]=number; 
  free(number);
  return node123; 
}
Run Code Online (Sandbox Code Playgroud)

我正在以正确的方式释放所引用的内存.number一旦我执行上述操作,我就会收到错误;

Invalid read of size 4
==15957==    at 0x403804: main (abc.c:1255)
==15957==  Address 0x540cb50 is 0 bytes inside a block of size 4 free'd
Run Code Online (Sandbox Code Playgroud)

请建议我如何在这种情况下防止内存泄漏?提前致谢.

[编辑]

嗨,实际上上面提到的不是我的真实代码.但我已经尽力重新选择代码的sturcutre和语义.实际上我正在实施数据架构.number是一些临时存储,node123是我真正的数据库.我想number在数据库中分配值并取消引用它.numbertype是数据库的一个组件.

[EDIT2]

对应于行的代码1255是打印由.持有的值.object i'e value …

c valgrind memory-leaks memory-management

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

即使我的变量已初始化,条件跳转或移动也取决于酉值(s)?

根据Valgrind的说法,变量"holder"在我的函数spaceMove()中未初始化.值得注意的是,每当我尝试操纵该变量时,它就会说.我在尝试进入循环之前尝试将其初始化为NULL,但它仍然给了我相同的消息.如果有人能够解释为什么持有人被认为是未初始化的,那将非常感谢,请和谢谢.

void spaceMove(char *str, char *delim){
    int i, spPlus=0;
    char *holder;

    holder = malloc(strlen(str)+1);

    for(i=0; i<strlen(str); i++, spPlus++){
        if(str[i] == ' ' && str[i+1] == ' '){
            strcat(holder, " "); //line 11
            //spPlus += 1;
            i += 1;
        }
        else if(str[i] == '\t' && str[i+1] == '\t'){
            strcat(holder, "\t"); //line 16
            i += 1;
        }
        holder[spPlus] = str[i];
    }
    strcpy(str, holder);    //line 21
}

void processStrings(struct mainList *header){
    int i;
    struct stringList *temp;

    temp = header->next;

    while(temp != NULL){
        for(i=0; …
Run Code Online (Sandbox Code Playgroud)

c valgrind

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

结构中的大小读取无效

我有与这个几乎相同的问题: 从结构“无效读/写”中的指针获取数据

但是当我尝试遵循这些建议时,我仍然对大小进行了相同的无效读取。

我的结构是这样的

typedef struct{
   int lenght;
   int max_lenght;
   int extract;
   int inserting;
   void** structure;
} queue_t;
Run Code Online (Sandbox Code Playgroud)

我的循环缓冲区代码:

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

#include "queue.h"

 /* creates a new queue with a given size */
queue_t* create_queue(int capacity){

    queue_t* queue = malloc (sizeof(queue_t));

    queue->lenght = 0;
    queue -> max_lenght = capacity;
    queue -> extract = 0;
    queue -> inserting = 0;
    queue -> structure = malloc(sizeof(void*) * capacity);
    return queue;
}
/* deletes the queue and all …
Run Code Online (Sandbox Code Playgroud)

c struct valgrind

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

这为什么会这么分裂?有人可以解释valgrind错误吗?

所以我有这个程序在我的家用机器上编译很好,但是一旦我在大学服务器上编译它就会打破......:/这对我的屁股来说是一个巨大的痛苦.我不知道可能导致错误的位置或原因.我首先从大学的valgrind报告开始.

    ==13527== Memcheck, a memory error detector
==13527== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==13527== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==13527== Command: ./main stock.dat coins.dat
==13527== 
==13527== Invalid write of size 8
==13527==    at 0x402762: load_data (in /RMIThome/shr/5/s3234575/Assignments2/main)
==13527==    by 0x4028BE: main (in /RMIThome/shr/5/s3234575/Assignments2/main)
==13527==  Address 0x6172676f72502074 is not stack'd, malloc'd or (recently) free'd
==13527== 
==13527== 
==13527== Process terminating with default action of signal 11 (SIGSEGV)
==13527==  General Protection Fault …
Run Code Online (Sandbox Code Playgroud)

c struct valgrind memory-leaks segmentation-fault

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

为什么任何可执行文件泄漏内存

甚至

int
main () {
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

泄漏记忆.确实,运行valgrind [0]输出

==21013== HEAP SUMMARY:
==21013==     in use at exit: 72,704 bytes in 1 blocks
==21013==   total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated
==21013== 
==21013== LEAK SUMMARY:
==21013==    definitely lost: 0 bytes in 0 blocks
==21013==    indirectly lost: 0 bytes in 0 blocks
==21013==      possibly lost: 0 bytes in 0 blocks
==21013==    still reachable: 72,704 bytes in 1 blocks
==21013==         suppressed: 0 bytes in 0 blocks
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如果Valgrind应该使用c ++进行泄漏检查失败,我应该如何亲自检查内存泄漏?

[0], …

c++ valgrind memory-leaks

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

Valgrind 检测到内存泄漏,找不到 C

Valgrind 正在发现内存泄漏,但我似乎无法确定它们,我希望这里有人可以帮助我:

在此处输入图片说明

在此处输入图片说明

主要电话是 Dictionary* dictionary = initDictionary();

c memory malloc valgrind

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