指向内存分配的指针,为什么这个错了?

时间:2010-03-04 09:32:56

标签: c++ pointers memory-management

我只是试图了解各种指针概念,并且我有以下代码:

char** a = new char*; // assign first pointer to point to a char pointer

    char b[10] = "bla bla";
    *a = new char; //assign second pointer a block of memory.  -> This looks wrong to me!!  
    (**a) = b[2]; 

那么第二个“指针”内存分配有什么问题?它运行和东西,但它只是感觉不对。

编辑:

感谢您澄清这一点!我学到了一些东西!

6 个答案:

答案 0 :(得分:2)

它没有任何问题,除了在C ++中使用动态内存分配相当糟糕的风格。

答案 1 :(得分:2)

char** a = new char*;  // a is a pointer to a pointer to a type char. allocate a new pointer variable and make a point to it.
char b[10] = "bla bla"; // define a char array.
*a = new char; // allocate a new char and make the pointer whose address is in a point to it.
(**a) = b[2]; // copy the 3rd char of b to the char whose address is pointed by a.

答案 2 :(得分:1)

*a = new char;表示使用其默认构造函数创建单个char变量。 它相当于*a = new char();并且您将刚创建的变量的地址分配给指针a

答案 3 :(得分:1)

它“错误”的唯一原因是它不清楚。你显然同意这一点尚不清楚。

在某些情况下,类似的代码可能是“正确的”,当更好的名称和更好的类结构时,目标是明确的,也消除了对手段的怀疑。

答案 4 :(得分:0)

它在技术上没有任何问题。

但是,在同一代码页上显式分配指向单个元素的指针并不常见。你不会经常在实践中这样做,因为你很少会说“如果你需要了解FooBar,请问汤姆,汤姆就是我。”

答案 5 :(得分:0)

从来没有错,技术上。但似乎很少使用这种风格。