分配指向结构的动态指针数组
Allocate a dynamic array of pointers to the structure
我已经创建了动态数组
struct Student{
string name;
string dateOfBirth;
};
Student **students = new Student*[5]
但是当我尝试存储数据时出现错误
抛出异常:读取访问冲突。
这是 0xCDCDCDCD。
(*students[iterator]).name = name;
如果你想这样分配内存:
struct Student{
string name;
string dateOfBirth;
};
Student **students = new Student*[5];
正如评论所说,你需要考虑 students[0]
的数据类型到底是什么。在本例中,它是 Student *
,这意味着您必须这样对待它。如果您尝试通过执行以下操作直接为其分配一个值,您将遇到各种内存错误(希望编译器 errors/warnings)
Student **students = new Student*[5];
students[0] = Student{"Bob", "1st Jan 1970"}; // Nope
*students[0] = Student{"Bill", "1st Jan 1970"}; // Also no
第一个显然行不通,因为我们试图将 Student
分配给 Student *
,这是不可能的。第二个不起作用的原因与内存分配的工作方式有关。
当您调用 Student **students = new Student*[5]
时,您是在告诉编译器为 5 个 Student *
对象分配内存,这些对象最终都是 64 位无符号整数。这意味着这些 64x5 位有可用内存,但请记住,它们是指针,因此它们需要指向某个地方。
赋值的方式如下:
students[0] = new Student{"Barry", "1st Jan 1970"}; // (Notice the 'new')
这将为新的 Student
动态分配内存,并设置 students
中的指针指向它,允许您访问它。
========警告========
当您动态分配内存时(即使用 new
或 malloc
等),您负责调用 delete[]
或 delete
或 free
,视情况而定。如果没有这些调用,内存将永远不会被释放,最终会出现内存泄漏,这可能会带来很大的问题。使用指向指针的指针的困难在于您需要在释放主指针之前释放每个 sub-pointer 。尝试以相反的方式去做会导致其他有趣的问题,你最好不要经历这些问题。
希望这对您有所帮助。让我知道是否可以清理任何东西或者它是否不起作用...
我已经创建了动态数组
struct Student{
string name;
string dateOfBirth;
};
Student **students = new Student*[5]
但是当我尝试存储数据时出现错误
抛出异常:读取访问冲突。 这是 0xCDCDCDCD。
(*students[iterator]).name = name;
如果你想这样分配内存:
struct Student{
string name;
string dateOfBirth;
};
Student **students = new Student*[5];
正如评论所说,你需要考虑 students[0]
的数据类型到底是什么。在本例中,它是 Student *
,这意味着您必须这样对待它。如果您尝试通过执行以下操作直接为其分配一个值,您将遇到各种内存错误(希望编译器 errors/warnings)
Student **students = new Student*[5];
students[0] = Student{"Bob", "1st Jan 1970"}; // Nope
*students[0] = Student{"Bill", "1st Jan 1970"}; // Also no
第一个显然行不通,因为我们试图将 Student
分配给 Student *
,这是不可能的。第二个不起作用的原因与内存分配的工作方式有关。
当您调用 Student **students = new Student*[5]
时,您是在告诉编译器为 5 个 Student *
对象分配内存,这些对象最终都是 64 位无符号整数。这意味着这些 64x5 位有可用内存,但请记住,它们是指针,因此它们需要指向某个地方。
赋值的方式如下:
students[0] = new Student{"Barry", "1st Jan 1970"}; // (Notice the 'new')
这将为新的 Student
动态分配内存,并设置 students
中的指针指向它,允许您访问它。
========警告========
当您动态分配内存时(即使用 new
或 malloc
等),您负责调用 delete[]
或 delete
或 free
,视情况而定。如果没有这些调用,内存将永远不会被释放,最终会出现内存泄漏,这可能会带来很大的问题。使用指向指针的指针的困难在于您需要在释放主指针之前释放每个 sub-pointer 。尝试以相反的方式去做会导致其他有趣的问题,你最好不要经历这些问题。
希望这对您有所帮助。让我知道是否可以清理任何东西或者它是否不起作用...