如何在c ++中使用malloc和memset作为数组?

时间:2014-04-20 19:53:27

标签: c++ pointers malloc

我想声明一个存储在指针A中的数组。我有以下代码。

int length = 8;
int *A;
A = (int*) malloc(length*sizeof(int));
A = {5, 1, 3, 5, 5, 2, 9, 8};

但是,无法像上面那样初始化数组。该错误表示"无法转换为' int'在任务"。我该如何解决这个问题?

此外,在声明数组(指针)时,c ++中是否需要malloc和memset?

谢谢!

4 个答案:

答案 0 :(得分:2)

快速回答:

A[0] = 5;
A[1] = 1;
A[2] = 3;
A[3] = 5;
A[4] = 5;
A[5] = 2;
A[6] = 9;
A[7] = 8;

基本上,当你说" A ="你正在改变" A指向的是什么"。如果你想改变" A指向的价值"您必须使用[]*

cplusplus.com has a good article on that topic

修改

我必须警告你,在C ++中使用malloc不是一个好的实践,因为它不会初始化破坏复杂的对象。

如果你有:

int length=8;
class C_A {
    C_A() {
        std::cout << "This cout is important" << std::endl;
    }
    ~C_A() {
        std::cout << "Freeing is very important also" << std::endl;
    }
};

C_A* A;
A = (C_A*) malloc(length*sizeof(C_A));
free(A);

你会注意到cout永远不会发生,而正确的是:

A = new C_A[length];
delete[] A;

答案 1 :(得分:1)

NO。您不需要malloc将数组声明为指针,因为数组本质上是一个指针。使用malloc或不使用的区别在于,当使用malloc时,数组在堆中而不是堆栈中声明。

其次,当且仅当您在声明例如 这是对的:int a[3]={1,2,3};

这是错误的:

int a[3]; a= {1,2,3};

答案 2 :(得分:0)

使用malloc()和memcpy()执行所需操作的合理有效方法是

int initializer[] = {5, 1, 3, 5, 5, 2, 9, 8};
int *A;
A = (int*) malloc(length*sizeof(int));
memcpy(A, initializer, length*sizeof(int));

答案 3 :(得分:-2)

使用new而不是malloc,它返回T *而不是void *,并支持异常:

int *A = new int[length];