尝试添加char数组时中止陷阱

时间:2011-05-14 05:21:45

标签: c arrays memory-management abort

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

#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];

这是一个包含多个文件和函数的大项目,添加所有代码以提供更大的图片可能有点难......有谁知道这里发生了什么?

解决:strcat中使用它之前,这一切都归结为我没有null终止我正在构建的字符串。

1 个答案:

答案 0 :(得分:4)

是的,但仅限于一般情况

C不是memory safe语言。可能会意外地将对象与另一个对象混淆;这有时称为wild pointer or a dangling pointer.

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

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

  1. 拥有一切原型
  2. 启用部分或全部编译器警告并修复已识别的问题
  3. 合并memory debugger
  4. 使用通用调试器并获取追溯