我的问题是,如果分配的变量再次被malloced而不释放内存,垃圾收集器将释放内存.
例如:
ptr1 = malloc(100)
ptr1 = malloc(200)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第一个分配的内存将被垃圾收集器解除分配?如果是,那么当.. ???
我有一个叫做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)
一旦我注释掉 …
请帮我.当我运行这个程序时,我无法弄清楚为什么我会得到一个核心转储.在返回任何东西之前我可以打印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的初学者,让我说我有这样的代码:
#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)
在上面的代码将递增数组的地址a由1 char在调用函数test.很好,现在我知道*它用于检索指针指向的对象值.
但奇怪的是,当我改变t++为
*t++;
Run Code Online (Sandbox Code Playgroud)
我得到的输出和以前一样.我字面意思是这个,上面的语句
*t++;应该改变内容只知道,根据*运算符的定义.
但这又改变了地址t.怎么会?我在哪里弄错了这个概念?
提前致谢
我是新手复制构造函数,当我开始使用向量时似乎无法让它们工作.
// 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) 由于上述错误,我无法修改类对象的成员值:
当我调用初始化函数来初始化我的"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) 我正在尝试编写将字符串存储在数组中的代码。我正在尝试使用char *来实现,但无法实现。我在网上搜索,但找不到答案。我已经尝试了下面的代码,但是没有编译。我使用字符串流,因为在某些时候我需要将一个字符串与一个整数连接起来。
stringstream asd;
asd<<"my name is"<<5;
string s = asd.str();
char *s1 = s;
Run Code Online (Sandbox Code Playgroud) 当我怀疑时,我正在重新审视指针.
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?
任何人都可以指出为什么以下代码需要修改函数中的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)