标签: memory-management

断言:指针必须来自'本地'堆

我正在测试一个名为clunk的小型声音库(http://sourceforge.net/projects/clunk/).我为visual studio 11构建了该库,并将其链接到我的visual studio项目中.当我尝试test.cpp时,我收到了msvcr110d.dll抛出的断言.

是否与我的运行时库设置有关:它是" 多线程调试DLL(/ MDd) "?在clunk的cmakelist.txt中,我添加了以下代码行:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
Run Code Online (Sandbox Code Playgroud)

我仍然收到指针分配问题的消息.为什么?

c++ dll memory-management assertion

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

***glibc检测到***./m:free():尝试释放堆内存时无效的下一个大小(快)

我有一个小代码,它在堆上分配一些内存,然后在它使用后尝试释放它.我在内存映射中遇到此错误.

守则是::

void merge(int *arr, int start, int mid, int end)
{
     int i = 0, j = 0, k = 0, tmp1 = 0, siz = 0;
     int *pt = NULL;
     j = start, k = mid+1, tmp1 = start;

     siz = (end - start) + 1;

     if ((pt = malloc(siz * sizeof(int))) == NULL) /* line 32 */
     {
         printf("\n ERROR Aloocating mem \n");
         return;
     }

     while (j <= mid && k <= end)
     {
        if (arr[j] <= …
Run Code Online (Sandbox Code Playgroud)

c linux free memory-management glibc

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

在C中按顺序打开4092个文件

我正在编写一个程序来读取大约30,000个文件中的单词,但是在第4092次迭代之后我再也无法读取新文件了.我甚至尝试在循环结束时包含一个free(filePointer),但在尝试打开4092nd文件后,我的文件指针仍为NULL.任何想法或建议将不胜感激.

int main(int argc, char *argv[]) {


  hashTable *bigramHT = create_table(100000000);
  hashTable *tokenHT = create_table(100000000);
  int numTokens = 0;
  /* file pointer */
  FILE *fp = NULL;
  /* directory pointer */
  DIR *dirp = NULL;
  /* pointer to directory struct */
  struct dirent *entry = NULL;

  /* check if directory exists and can be opened */
  if((dirp = opendir(argv[1])) == NULL){
    return 1;
  }

  /* allocate memory for the filename paths (using maximum possible length) */
  char *path;
  path = …
Run Code Online (Sandbox Code Playgroud)

c pointers memory-management file

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

如何在D中的堆上创建一个字符串?

我在D中编写一个trie,我希望每个trie对象都有一个指向某些数据的指针,如果该节点是trie中的终端节点,则该指针具有非NULL值,否则为NULL.在创建trie之前,数据的类型是不确定的(在C中,这将使用a完成void *,但我计划用模板完成),这是为什么需要指向堆对象的原因之一.

这需要我最终在堆上创建我的数据,此时trie节点可以指向它.尝试,似乎new执行此任务,就像在C++中一样.但是由于某种原因,这会因字符串而失败.以下代码有效:

import std.stdio;

void main() {
    string *a;
    string b = "hello";
    a = &b;
    writefln("b = %s, a = %s, *a = %s", b, a, *a);
}
/* OUTPUT:
b = hello, a = 7FFF5C60D8B0, *a = hello
*/
Run Code Online (Sandbox Code Playgroud)

但是,这失败了:

import std.stdio;

void main() {
    string *a;
    a = new string();
    writefln("a = %s, *a = %s", a, *a);
}
/* COMPILER FAILS WITH:
test.d(5): Error: new can only create structs, dynamic arrays …
Run Code Online (Sandbox Code Playgroud)

memory-management d

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

简单的记忆问题练习

我主要使用高级编程语言,昨天有朋友让我帮他解决一个简单的C++练习,当我正在研究它时,我编写了这段代码:

for (int x = 0; x < 10; x++){
    int a, b, c;
    a = x;
    b = x*2;
    c = x+5;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是否会导致内存泄漏,使a,b,c始终在内存的不同位置创建,或者它们是否总是被每个循环覆盖?

c++ memory-leaks memory-management

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

为什么我的程序在使用堆分配的内存时会抛出分段错误?

在编写一个程序来反转一个字符串后,我无法理解为什么在尝试反转字符串时出现了seg故障.我在下面列出了我的程序.

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

void reverse(char *);

int main() {
  char *str = calloc(1,'\0');
  strcpy(str,"mystring0123456789");
  reverse(str);
  printf("Reverse String is: %s\n",str);
  return 0;
}

void reverse(char *string) {
  char ch, *start, *end;
  int c=0;
  int length = strlen(string);
  start = string;
  end = string;

  while (c < length-1){
    end++;
    c++;
  }
  c=0;

  while(c < length/2){
    ch = *end;
    *end = *start;
    *start = ch;
    start++;
    end--;
    c++;
  }
}
Run Code Online (Sandbox Code Playgroud)

第一个问题:

即使我只将1个字节的内存分配给char指针str(calloc(1,'\0')),并且我将18个字节的字符串复制mystring0123456789到其中,并且它没有抛出任何错误,并且程序在没有任何SEGFAULT的情况下工作正常.

为什么我的程序没有抛出错误?理想情况下它应该抛出一些错误,因为它没有任何内存来存储那个大字符串.有人可以对此有所了解吗?

该程序运行完美,并给我输出Reverse …

c memory-management char-pointer

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

将动态创建的对象分配给作为类的私有成员的指针有什么问题吗?

例如,假设我有一个Game类:

class Game{
public:
    Game();
    ~Game();

    void CreateWindowClass(HINSTANCE);
    void CreateRessources(HINSTANCE);

    void ShowMainScreen();

    Winsock* CreateWinsock();

    MessageLog* CreateMessageLog();

    D2DResources* CreateD2DResources(HWND);

    HWND Getm_hWnd();

public:
    D2DResources* pD2DResources;
    Winsock* pWinsock;
    MessageLog* pMessageLog;

private:
    HWND m_hWnd;

};
Run Code Online (Sandbox Code Playgroud)

而Game中的3个指针分配如下:

Winsock* Game::CreateWinsock()
{
    pWinsock = new Winsock;

    return pWinsock;
}
Run Code Online (Sandbox Code Playgroud)

这会导致任何问题吗?另外,我会删除动态创建的对象,如下所示:delete pWinsock;?

c++ pointers memory-leaks memory-management dynamic

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

从内存中删除类/变量实例(完全)

我正在使用c#(.NET)中的套接字项目.我正在使用某些类(数据包)处理数据.当我正在寻找内存使用时,如果数据传入,它就会上升!即创建类.如何从内存中删除(手动)类和未使用的变量/类(不使用GC!)?

如果我尝试基本的东西,比如只接收数据,它就会再次上升.此时,我想完全从内存中删除/删除类/变量!

有人可以帮忙吗?

c# memory memory-management class instance

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

c - 函数中初始化的数组指针在返回后包含错误的值

我正面临一个问题,我当然做错了什么.我需要调用一个返回指向int数组的指针的函数,但是当它返回后,数组内的值是错误的,并且缺少一些值.

int* patternForFirstDigit(int digit) {
    int *pattern;
    pattern = (int [6]){1,1,1,1,1,1};

    switch (digit) {
        case 0:
            pattern = (int [6]){1,1,1,1,1,1};
            break;

        case 1:
            pattern = (int [6]){1,1,2,1,2,2};
            break;

        default:
            pattern = (int [6]){0,0,0,0,0,0};
            break;
    }

    for (int i = 0; i < 6; i++) {
         printf("%i\n", pattern[i]);
    }

    return pattern;
}
Run Code Online (Sandbox Code Playgroud)

如果是数字= 1,这是打印的内容

1, 1, 2, 1, 2, 2
Run Code Online (Sandbox Code Playgroud)

但回来后

int *pattern = patternForFirstDigit(0);
for (int i = 0; i < 6; i++) {
     printf("%i\n", pattern[i]);
}
Run Code Online (Sandbox Code Playgroud)

这是什么印刷品

1, -1405451528, …
Run Code Online (Sandbox Code Playgroud)

c arrays int pointers memory-management

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

C#中的垃圾收集

所以我正在为一个类的MySQL数据库创建一个客户端程序,我在表单类的顶部声明了一些变量,我在表单的整个生命周期中使用和重用.每次使用变量时,我只是做了类似的事情:

variableName = new VariableClass();
Run Code Online (Sandbox Code Playgroud)

然后使用它,主要使用DataSet/Tables.我想知道的是我应该在再次调用new之前明确释放内存还是C#为我处理这个问题?

c# memory-management

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

标签 统计

memory-management ×10

c ×4

c++ ×3

pointers ×3

c# ×2

memory-leaks ×2

arrays ×1

assertion ×1

char-pointer ×1

class ×1

d ×1

dll ×1

dynamic ×1

file ×1

free ×1

glibc ×1

instance ×1

int ×1

linux ×1

memory ×1