标签: dynamic-memory-allocation

删除char数组似乎根本不会影响数组

所以我执行这段代码

#include <cstdlib>
#include <iostream>
int main()
{
    char *test = new char[10];
    strcpy(test, "Hello Ther");;
    std::cout << test << std::endl;
    delete[] test;
    std::cout << test << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而输出是

你好Ther

你好Ther

似乎该delete[] test语句没有做任何事情......根本没有运行时或编译时错误

完全难过我

c++ char dynamic-memory-allocation

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

错误,动态地将对象分配给数组

我有一个指向结构数组的指针,如下所示:

class Terrian  {
     ...
    private:
        Vector *terrian_vertices;
     ...
}
Run Code Online (Sandbox Code Playgroud)

并且指针的数据在"construct_vertices"函数中生成

Terrian::Terrian(int width, int height)  {
    this->width = width;
    this->height = height;

    std::cout << "Width: " << width << "  Height: " << height << "\n";

    std::cout << "Vertices\n";
    construct_vertices();
    std::cout << "Element\n";
    construct_elements();
    std::cout << "Buffers\n";
    construct_buffers();
}

void Terrian::construct_vertices()  {
    terrian_vertices = new Vector[width * height];

    std::cout << "Generating data\n";

    for (int x = 0; x < width; x++)  {
        for (int y = 0; y < height; …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic dynamic-memory-allocation

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

calloc/malloc比C++中的operator new更快

我想知道的是,如果我在c ++程序中使用calloc/malloc而不是operator new,它是否会使内存分配更快,或者因为使用c ++编译器编译程序而无关紧要.

编辑:

我想应该已经明白我没有使用new运算符来调用构造函数.只是像数组一样的内存分配.

c++ dynamic-memory-allocation

0
推荐指数
2
解决办法
3109
查看次数

c ++重载operator(),用于在动态2D数组中分配值

我正在尝试使用overload()运算符将值分配给动态分配的2D数组,这是我的代码 -

class test {
    private:
        int** data ; int row, col ;

    public:
        test(int row = 2, int col = 2)  {
            this->row = row ; this->col = col ;
            this->data = new int*[this->row] ;
            for(int i = 0 ; i < this->row ; i++)
                this->data[i] = new int[this->col] ;
        }

        ~test() {
            for(int i = 0 ; i < this->row ; i++)
                delete [] this->data[i] ;
            delete [] this->data ;
        }

        const int operator() (int row, int col) …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading dynamic-memory-allocation c++11

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

新运营商返回什么?

我是初学者,这个问题总让我感到困惑.我的学术书说新操作员返回一个地址.但在许多教程中,我发现new返回指向特定地址的指针.拿着这个:

  char *name = new char[x];
Run Code Online (Sandbox Code Playgroud)

这里为name命名了什么值,动态分配的地址或指向动态分配的char的指针?谢谢

c++ new-operator dynamic-memory-allocation

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

如何在main()之外分配一个struct?

我已经构建了一个如下所示的book结构:

typedef struct _book{
    char name[NAME_LENGTH];
    char authors[AUTHORS_NAME_LENGTH];
    char publisher[PUBLISHER_NAME_LENGTH];
    char genre[GENRE_LENGTH];
    int year;
    int num_pages;
    int copies;
}book;
Run Code Online (Sandbox Code Playgroud)

我正在尝试定义一个图书馆,这是一个书籍阵列,所以稍后我可以在图书馆中存放另一个功能的图书.当像这样定义库时,内存写入/读取有问题library[BOOK_NUM],所以我决定分配.

问题是,它只允许我在main函数内部进行分配.当我写这行时:

book *library = (book*)malloc(BOOK_NUM*sizeof(book));
Run Code Online (Sandbox Code Playgroud)

main()它之外给我一个错误:

IntelliSense:常量表达式中不允许函数调用

错误C2099:初始化程序不是常量

但如果我将上面的线移到里面main()就行了.这是为什么?

另外,定义数组的更好方法是什么,以便以后可以用其他函数更改它?

c dynamic-memory-allocation

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

C++指向一个对象,然后移动它的内存位置

我正在使用C++ 14.我们假设我有一个class X和一个std::vector<X> mVector.

我还有以下代码:

std::shared_ptr<X> AddX(const X &x)
{
    mVector.push_back[x];
    return std::shared_ptr<X>(&mVector[mVector.size()-1])
}
Run Code Online (Sandbox Code Playgroud)

此方法将对象x插入mVector并返回一个指向此插入对象的共享指针.

X x1;
shared_ptr<X> pX1 = AddX(x1);
Run Code Online (Sandbox Code Playgroud)

一切正常,但当我插入第二个对象

X x2;
shared_ptr<X> pX2 = AddX(x2);
Run Code Online (Sandbox Code Playgroud)

pX1不指向插入的对象x1,因为最后一个push_back已经在内存中移动了它的位置(在硬调试之后看到).这对我来说很可惜,因为我的程序需要这些指针才能正常工作,并且mVector需要是动态的,它一直在修改(使用新X对象或删除旧对象).

我怎样才能解决这个问题?我想比一种方法可以使用对象索引而不是它们的指针,但这会惩罚我的执行时间,因为我应该每次修改时更新许多属性mVector.是否可以管理它并仍然使用指针?

c++ pointers shared-ptr dynamic-memory-allocation

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

C:如何修改结构中字符串的最大大小?

该练习提供了一个简单的程序来创建数据库,该程序转向以下结构

struct Address {
  int id;
  int set;
  char name[MAX_DATA];
  char email[MAX_DATA];
};
Run Code Online (Sandbox Code Playgroud)

我被要求修改代码,以便我可以作为参数传递给程序的最大长度 .name.email.当然,现在,如果不是将其定义MAX_DATA为宏而是将其作为全局变量使用,我会得到错误:在文件范围内修改了'name'.

然后我尝试创建不同的if循环,旨在通过重新定义来传递MAX_DATA值struct Address,例如:

if(argc > 6) {
  int maxdata = atoi(argv[6]);
  struct Address {
    int id;
    int set;
    char name[maxdata];
    char email[maxdata];
  };
  DatabaseSet(conn, id, argv[4], argv[5]);
  DatabaseWrite(conn);
  break;
}
Run Code Online (Sandbox Code Playgroud)

DatabaseSetDatabaseWrite(这在工作struct Connection,涉及到另一个struct Database,谁最终直接关系到struct Address)忽略的新长度nameemail.

编辑:谢谢.

谢谢大家的意见和答案,你真的帮助我完成了练习和我的一般未知的C.

c struct pointers dynamic-memory-allocation

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

如何在c中释放指针后保存指针地址

我编写了一个代码,它首先创建一个内存alloc并将一个字符串保存在另一个指针中.根据代码,该值必须在空闲后保存在其他地址中,但它会给出错误"munmap_chunk():无效指针".

我的代码是:

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

int main()
{
static char *server_alg;
char *test;
char *test = (char*) malloc(30*sizeof(char));
server_alg = "A";
strcpy(test, server_alg);
printf("server_alg addr = %u \n", &*server_alg);
printf("server_alg value = %u \n", server_alg);
printf("SERVER_ALGO addr = %d \n", *server_alg);
free(server_alg);
server_alg=NULL;
printf("           nulled          \n");
printf("server_alg addr = %u \n", &*server_alg);
printf("server_alg value = %u \n", server_alg);
printf("SERVER_ALGO addr = %u \n", test);
printf("SERVER_ALGO value = %u \n", *test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是错的吗?

谢谢你的帮助

c pointers dynamic-memory-allocation

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

指针堆分配如何为C中的结构分配足够的空间?

以下代码可以编译并完美运行:

typedef struct n {
    char value;
    struct n* next;
} node;
void insert_new_node(node** head, char new_value)
{
    node* new_node = malloc(sizeof(node*));
    new_node->value = new_value;
    new_node->next = NULL;

    if(*head == NULL)
    {
        *head = new_node;
    }
    else
    {
        node* current = *head;

        while(current->next != NULL)
        {
            current = current->next;
        }

        current->next = new_node;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是-请注意,我实际上实际上只是为指向结构的指针分配了空间,而不是为结构本身分配了空间(ref:)node* new_node = malloc(sizeof(node*));。所以我的问题是,该结构数据实际存储在哪里,如果存储在堆中,它将如何工作?

c memory malloc pointers dynamic-memory-allocation

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