-2

我正在编写一个带有指针和结构的 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));

我究竟做错了什么?

4

2 回答 2

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() 从根本上没有问题。

也许“line_count”是假的,也许“malloc()”失败了(在这种情况下,它应该返回“NULL”)......或者你可能错误地访问了结构和/或未能正确初始化它。

实际崩溃的堆栈回溯将非常有用。

于 2012-05-29T20:42:47.927 回答
0

只有ph == NULLmalloc调用之后并且您取消引用它时,您正在显示的代码段可能会崩溃。

malloc手册页:

malloc() 和 calloc() 函数返回一个指向已分配内存的指针,该指针适合任何类型的变量对齐。出错时,这些函数返回 NULL。NULL 也可以通过成功调用 malloc() 且大小为零,或成功调用 calloc() 且 nmemb 或大小等于 0 来返回。

于 2012-05-29T20:38:46.167 回答