我正在编写一个带有指针和结构的C项目,现在正面临这个问题: 有一个结构
struct Customer
{
char Name[80];
char Address[40];
int ID;
int Pnumber;
};
我将用* line_count *成员数量制作这个结构的动态数组。我使用这段代码,但它崩溃了一个程序:
struct Customer* ph;
ph = (struct Customer*)malloc(line_count * sizeof(struct Customer));
我做错了什么?
答案 0 :(得分:1)
好:
struct Customer* ph;
ph = (struct Customer*)malloc(line_count * sizeof(struct Customer));
更好:
struct Customer* ph =
(struct Customer*)malloc(line_count * sizeof(struct Customer));
if (!ph) {
<<error handling>>
...
但坦率地说,这听起来像问题在你的代码的其他地方。
你的malloc()没有根本错误。
也许&#34; line_count&#34;是虚假的,也许&#34; malloc()&#34;失败(在这种情况下,它应该返回&#34; NULL&#34;)...或者您可能无法正确访问结构和/或无法正确初始化它。
实际崩溃的堆栈追溯将非常有用。
答案 1 :(得分:0)
您显示的代码段可能会在ph == NULL
调用后malloc
时崩溃,并且您取消引用它。
来自malloc
手册页:
malloc()和calloc()函数返回指向已分配的指针 适合任何类型变量的内存。出错, 这些函数返回NULL。 a也可能返回NULL 成功调用大小为零的malloc(),或者成功调用 用nmemb或大小等于零来调用calloc()。