【问题标题】:Abort trap when trying to add char arrays尝试添加 char 数组时中止陷阱
【发布时间】:2011-05-14 05:21:44
【问题描述】:

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

#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 终止了我正在构建的字符串。

【问题讨论】:

    标签: c arrays memory-management abort


    【解决方案1】:

    是的,但仅限于一般情况

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

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

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

    1. 为一切准备一个原型
    2. 打开部分或全部编译器警告并修复已识别的问题
    3. 加入memory debugger
    4. 使用通用调试器并获取回溯

    【讨论】:

    • 谢谢@digitalross,直到你的回答我没想到除了变量声明之外的其他地方。
    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多