我正在尝试将多个字符数组添加到函数中:
#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终止我正在构建的字符串。
答案 0 :(得分:4)
C不是memory safe语言。可能会意外地将对象与另一个对象混淆;这有时称为wild pointer or a dangling pointer.
问题不在于inputDescription是240还是241字节,而是问题在于哪个对象是别名哪个是另一个,以及是否会导致致命错误或更小的问题。程序的小改动会改变内存布局并改变失败的症状,但原因是程序源代码中的错误。
如果你清理程序,你可能会发现问题。