标签: pointers

垃圾收集器和双重分配的内存

我的问题是,如果分配的变量再次被malloced而不释放内存,垃圾收集器将释放内存.

例如:

ptr1 = malloc(100)
ptr1 = malloc(200)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第一个分配的内存将被垃圾收集器解除分配?如果是,那么当.. ???

c garbage-collection pointers

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

C++ - 在删除堆上分配的任务数组时,添加列表<Task> l(或任何STL Container)作为数据成员会导致错误

我有一个叫做Task的课.头文件如下:

class Task
{
public:
    Task();
//Methods Declarations

private:

int uid;
list<Task> l;

    friend ostream & operator<<(ostream & os, const Task &t);
    friend ostream & operator<<(ostream & os, const list<Task *> &l);
};
Run Code Online (Sandbox Code Playgroud)

现在在我的主文件中,我运行:

Task * tasks[7];
for (int i = 0; i != 7; ++i)
    tasks[i] = new Task();

delete [] *tasks;
Run Code Online (Sandbox Code Playgroud)

在运行时,delete[] *tasks;我收到以下错误消息:

Assignment 4(23901) malloc: *** error for object 0x1001009f8: pointer being 
                                freed was not allocated *** set a breakpoint in 
                                malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)

一旦我注释掉 …

c++ memory debugging pointers

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

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

为什么我会把核心倾倒?

请帮我.当我运行这个程序时,我无法弄清楚为什么我会得到一个核心转储.在返回任何东西之前我可以打印all_albums_p得很好.我为什么要来core dumped

#include "music_server.h"

struct album_ {
  int num_tracks;
  char **tracks;
  int **playlist_hits;

};
typedef struct album_ album;

album *parse_album(FILE *album_file,int *number_of_albums){

  int number_of_album,number_of_tracks,number_of_charaters;
  int i,j;
  char dummy_space;
  int *p;

  fscanf(album_file,"%d", &number_of_album);

  *number_of_albums = number_of_album;

  album *all_albums_p = (album *)malloc(sizeof(album)*number_of_album);

  for(j=0;j<number_of_album;j++){

    fscanf(album_file,"%d", &all_albums_p[j].num_tracks);

    all_albums_p[j].tracks = calloc(all_albums_p[j].num_tracks,sizeof(char));
    all_albums_p[j].playlist_hits = calloc(all_albums_p[j].num_tracks,sizeof(int));

    /*Line 27*/ for(i=0;i<all_albums_p[j].num_tracks;i++){

      fscanf(album_file,"%d", &number_of_charaters);

      all_albums_p[j].tracks[i] = (char *)calloc(number_of_charaters+1,sizeof(char));
      all_albums_p[j].playlist_hits[i] = (int *)malloc(sizeof(int));
      all_albums_p[j].playlist_hits[i] = 0;
      fscanf(album_file," ",dummy_space);
      fscanf(album_file, "%[^\n]s", all_albums_p[j].tracks[i]);
    }
  }
  return all_albums_p;
}

main(int …
Run Code Online (Sandbox Code Playgroud)

c pointers

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

s ++和*s ++之间有什么区别吗?

我是C的初学者,让我说我有这样的代码:

#include <stdio.h>
void test(char *t)
{
     t++;
    *t = 'e';
}

void main()
{
    char a[] = "anto";
    printf("%c\n",a[1]);
    test(a);
    printf("%c\n",a[1]);
}
Run Code Online (Sandbox Code Playgroud)

这是示例代码,我正在弄清楚指针是如何工作的.根据我的说法:

t++;
Run Code Online (Sandbox Code Playgroud)

在上面的代码将递增数组的地址a1 char在调用函数test.很好,现在我知道*它用于检索指针指向的对象值.

但奇怪的是,当我改变t++

*t++;
Run Code Online (Sandbox Code Playgroud)

我得到的输出和以前一样.我字面意思是这个,上面的语句 *t++;应该改变内容只知道,根据*运算符的定义.

但这又改变了地址t.怎么会?我在哪里弄错了这个概念?

提前致谢

c pointers

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

复制构造函数中的C++向量数组

我是新手复制构造函数,当我开始使用向量时似乎无法让它们工作.

//  ROBOT CLASS
class Robot {
    private:
        char *name;
        int size;

        int cmdCount;

        command *cmdList;
        char items[8][16];
        int resources[3]; // silver, gold, then platinum

    public: 
        Robot( );
        Robot(int num_of_cmds, const char *nm);
        Robot(const Robot &);
        ~Robot( );

        const char *get_name( );
        command get_command(int pos) const;
        void set_item(const char item[ ], int pos);
        const char *get_item(int pos);

};

//  ROBOT CONSTRUCTOR default
Robot::Robot( ) {

    //  Load Robot name
    cmdCount = 5;
    try {
        name = new char[11];
    }
    catch(std::bad_alloc) …
Run Code Online (Sandbox Code Playgroud)

c++ constructor pointers vector

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

CX0030:错误:无法计算表达式

由于上述错误,我无法修改类对象的成员值:

当我调用初始化函数来初始化我的"garo"对象时,我收到以下运行时错误,

"Heretic.exe中0x01323976处的未处理异常:0xC0000005:访问冲突读取位置0x00000008."

注意:Garo类是Object的子级.

代码

Garo.h

#pragma once
#include "Object.h"

class Garo : public Object
{
private:
    int animationRow;

public:
    Garo();
    void Destroy();

    void Init(ALLEGRO_BITMAP *image = NULL);
    void Update();
    void Render();

    void MoveLeft();
    void MoveRight();
    void Idle();
    void SetAnimationRow(int row);
};
Run Code Online (Sandbox Code Playgroud)

Garo.cpp

#include "Garo.h"

Garo::Garo()
{
    Object::Init(20, 200, 3, 0, 0, 0, 16, 24);
}

void Garo::Init(ALLEGRO_BITMAP *image)
{
    Object::Init(20, 200, 3, 0, 0, 0, 16, 24);

    SetID(PLAYER);
    SetAlive(true);

    maxFrame = 3;
    curFrame = 0;
    frameWidth = 32;
    frameHeight …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

储存琴弦

我正在尝试编写将字符串存储在数组中的代码。我正在尝试使用char *来实现,但无法实现。我在网上搜索,但找不到答案。我已经尝试了下面的代码,但是没有编译。我使用字符串流,因为在某些时候我需要将一个字符串与一个整数连接起来。

stringstream asd;
asd<<"my name is"<<5;
string s = asd.str();
char *s1 = s;
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

递增指针(ptr ++)和(*ptr ++)

当我怀疑时,我正在重新审视指针.

int *ptr;
int arr[5] = {10,20,30,40,50};
ptr = &arr[0];
Run Code Online (Sandbox Code Playgroud)

现在printf("Value: %d",*ptr);打印10

如果我做:

ptr++;
printf("Value: %d",*ptr);
Run Code Online (Sandbox Code Playgroud)

结果将是: 20

同样,如果我这样做:

*ptr++;
printf("Value: %d",*ptr);
Run Code Online (Sandbox Code Playgroud)

结果是: 30

printf("Value: %d",++*ptr);
Run Code Online (Sandbox Code Playgroud)

给我 31

我认为ptr,int当我增加它时它是类型,它将跳转到下一个内存位置4个字节.但为什么它显示相同的行为*ptr++,ptr++而不是++*ptr

c pointers

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

在函数中修改指针值

任何人都可以指出为什么以下代码需要修改函数中的char**指针.如果我只是传递char*并在函数调用返回后修改该值k具有垃圾值.有人可以证明这一点吗?

char* call()
{
    return "fg";
}
void modify(char** i)
{
    *i = call();
}

int main()
{
    char* k= new char[3];
    modify(k);
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

标签 统计

pointers ×10

c++ ×6

c ×5

arrays ×1

constructor ×1

debugging ×1

garbage-collection ×1

memory ×1

vector ×1