4

我正在尝试将多个字符数组添加到函数中:

#define ID_LEN 5
#define MAX_NAME_LEN 25
#define FALSE 0
char **orderedIds, buffer[5], idString[ID_LEN + 1], inputName[MAX_NAME_LEN + 1], inputDrinkType;
char inputDescription[240];
int i, listSize = 0, uniqueID, validated = FALSE;

这将运行良好。但是,如果我向 inputDescription 添加一个字节,它将给我一个中止陷阱错误:

char inputDescription[241];

此外,如果我添加新的字符串数组,我会得到同样的错误:

char inputDescription[240], newStringArray[10];

这是一个具有多个文件和功能的大项目,添加所有代码以提供更大的图景可能有点困难......有人知道这里发生了什么吗?

已解决: 这一切都归结为我不是 null 终止我正在构建的字符串,然后在strcat.

4

1 回答 1

4

是的,但仅限于一般情况

C 不是一种内存安全语言。可能会意外地将一个对象与另一个对象混为一谈;这有时被称为野指针悬空指针

问题不在于 inputDescription 是 240 字节还是 241 字节,而在于哪个对象在为哪个对象起别名,以及这是否会导致致命错误或更小的问题。对程序的微小更改会改变内存布局并改变故障症状,但原因是程序源代码中的错误。

如果您清理程序,您可能会发现问题。

  1. 拥有一切的原型
  2. 打开部分或全部编译器警告并修复已识别的问题
  3. 集成内存调试器
  4. 使用通用调试器并获取回溯
于 2011-05-14T05:37:34.387 回答