为什么此动态字符串创建在固定数字后会引发exc_bad_access错误?

降钙素

好的,所以我试图将文件中的文本存储在字符串中,并且一切正常,直到我注意到我没有正确地重新分配内存,并且它不应该工作。

这是我main在更正它之前的功能:

FILE * file;
char * quijote, thisChar;
unsigned int writingAt = 0;

file = fopen("quijote.txt", "r");
quijote = malloc(1);

if (file != NULL) {
    while (1) {
        thisChar = (char)fgetc(file);
        if (thisChar == EOF) {
            break;
        } else {
            printf("strlen(quijote) = %lu; writingAt = %i\n", strlen(quijote), writingAt);
            quijote = (char *) realloc(quijote, (sizeof(quijote) + 1));
            quijote[writingAt] = thisChar;
            quijote[writingAt + 1] = '\0';
            writingAt++;
        }
    }
} else {
    perror("fopen");
}
fclose(file);

它可以完美运行,并且可以将所有文件正确存储在字符串中。请注意,内存重新分配是不正确的,因为它sizeof(quijote)总是具有相同的值(8),因此从理论上讲它应该不起作用。

现在,当我纠正了重新分配后,当writeAt = 135167时,它会随机引发EXC_BAD_ACCESS错误。这是“更正”的main功能:

FILE * file;
char * quijote, thisChar;
unsigned int writingAt = 0;

file = fopen("quijote.txt", "r");
quijote = malloc(1);

if (file != NULL) {
    while (1) {
        thisChar = (char)fgetc(file);
        if (thisChar == EOF) {
            break;
        } else {
            printf("strlen(quijote) = %lu; writingAt = %i\n", strlen(quijote), writingAt);
            quijote = (char *) realloc(quijote, (writingAt + 1));
            quijote[writingAt] = thisChar;
            quijote[writingAt + 1] = '\0';
            writingAt++;
        }
    }
} else {
    perror("fopen");
}
fclose(file);

这些是程序在错误之前打印的最后几行:

strlen(quijote) = 135162; writingAt = 135162
strlen(quijote) = 135163; writingAt = 135163
strlen(quijote) = 135164; writingAt = 135164
strlen(quijote) = 135165; writingAt = 135165
strlen(quijote) = 135166; writingAt = 135166
strlen(quijote) = 135167; writingAt = 135167
Exception: EXC_BAD_ACCESS (code=1, address=0x10fc20000)

我不明白为什么以前的代码起作用而这没有起作用,或者为什么程序在该特定数字中引发错误。另外,我尝试像这样重新分配给大小1:quijote = (char *) realloc(quijote, 1);由于某种原因,它也可以工作...

用户名

您分配writingAt + 1字符,然后访问quijote[writingAt + 1]这是未定义的行为-它是第(writingAt + 2)个字符,比分配的实际字符数多一个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么对字符串使用%1 $ s时得到EXC_BAD_ACCESS(格式:)

来自分类Dev

Swift字符串操作导致EXC_BAD_ACCESS

来自分类Dev

为什么会出现EXC_BAD_ACCESS错误

来自分类Dev

为什么在Swift中dispatch_queue_create会给出EXC_BAD_ACCESS错误?

来自分类Dev

为什么objc_msgSend导致EXC_BAD_ACCESS?

来自分类Dev

EXC_BAD_ACCESS为什么我的对象被释放?

来自分类Dev

使用字符数组和递归来反转字符串,一些线程1:EXC_BAD_ACCESS错误

来自分类Dev

为什么此递归例程提供EXC_BAD_ACCESS(代码= 1,地址= 0x8)?

来自分类Dev

UIAlertController EXC_BAD_ACCESS错误-Swift

来自分类Dev

迅速细分错误(EXC_BAD_ACCESS)

来自分类Dev

MIDINetworkConnection EXC_BAD_ACCESS错误

来自分类Dev

fscanf中的Exc_bad_access错误

来自分类Dev

NSDictionary的EXC_BAD_ACCESS错误

来自分类Dev

CGImageRef出现EXC_BAD_ACCESS错误

来自分类Dev

EXC_BAD_ACCESS错误,无信息

来自分类Dev

CLLocationManager EXC_BAD_ACCESS错误

来自分类Dev

为什么打印后跟在数字后面的“字符串状”值会被忽略?

来自分类Dev

Xcode8 Beta EXC_BAD_ACCESS创建弱引用时出现错误

来自分类Dev

为什么在这个简单的NSOutlineView数据源中使用EXC_BAD_ACCESS?

来自分类Dev

为什么SKProductsRequestDelegate / SKRequestDelegate didFailWithError在NSError上抛出EXC_BAD_ACCESS?

来自分类Dev

为什么glDrawArrays会导致EXC_BAD_ACCESS(代码= 2,地址= 0x0)?

来自分类Dev

为什么在构造函数中释放会导致EXC_BAD_ACCESS?

来自分类Dev

为什么使用std :: transform会导致exc_bad_access

来自分类Dev

我的EXC_BAD_ACCESS(代码= 2)错误的原因是什么?

来自分类Dev

为什么此SQL INSERT INTO语句引发错误:TypeError:在字符串格式化期间并非所有参数都被转换

来自分类Dev

为什么在回调指针指向函数时使用EXC_BAD_ACCESS(code = EXC_I386_GPFLT)?

来自分类Dev

为什么当我在.m文件中设置^ block变量时,我收到一条错误消息,指出Thread_1 EXC_BAD_ACCESS

来自分类Dev

为什么此atof()对于非0.0的字符串数字返回0.0?

来自分类Dev

调试EXC_BAD_ACCESS

Related 相关文章

  1. 1

    为什么对字符串使用%1 $ s时得到EXC_BAD_ACCESS(格式:)

  2. 2

    Swift字符串操作导致EXC_BAD_ACCESS

  3. 3

    为什么会出现EXC_BAD_ACCESS错误

  4. 4

    为什么在Swift中dispatch_queue_create会给出EXC_BAD_ACCESS错误?

  5. 5

    为什么objc_msgSend导致EXC_BAD_ACCESS?

  6. 6

    EXC_BAD_ACCESS为什么我的对象被释放?

  7. 7

    使用字符数组和递归来反转字符串,一些线程1:EXC_BAD_ACCESS错误

  8. 8

    为什么此递归例程提供EXC_BAD_ACCESS(代码= 1,地址= 0x8)?

  9. 9

    UIAlertController EXC_BAD_ACCESS错误-Swift

  10. 10

    迅速细分错误(EXC_BAD_ACCESS)

  11. 11

    MIDINetworkConnection EXC_BAD_ACCESS错误

  12. 12

    fscanf中的Exc_bad_access错误

  13. 13

    NSDictionary的EXC_BAD_ACCESS错误

  14. 14

    CGImageRef出现EXC_BAD_ACCESS错误

  15. 15

    EXC_BAD_ACCESS错误,无信息

  16. 16

    CLLocationManager EXC_BAD_ACCESS错误

  17. 17

    为什么打印后跟在数字后面的“字符串状”值会被忽略?

  18. 18

    Xcode8 Beta EXC_BAD_ACCESS创建弱引用时出现错误

  19. 19

    为什么在这个简单的NSOutlineView数据源中使用EXC_BAD_ACCESS?

  20. 20

    为什么SKProductsRequestDelegate / SKRequestDelegate didFailWithError在NSError上抛出EXC_BAD_ACCESS?

  21. 21

    为什么glDrawArrays会导致EXC_BAD_ACCESS(代码= 2,地址= 0x0)?

  22. 22

    为什么在构造函数中释放会导致EXC_BAD_ACCESS?

  23. 23

    为什么使用std :: transform会导致exc_bad_access

  24. 24

    我的EXC_BAD_ACCESS(代码= 2)错误的原因是什么?

  25. 25

    为什么此SQL INSERT INTO语句引发错误:TypeError:在字符串格式化期间并非所有参数都被转换

  26. 26

    为什么在回调指针指向函数时使用EXC_BAD_ACCESS(code = EXC_I386_GPFLT)?

  27. 27

    为什么当我在.m文件中设置^ block变量时,我收到一条错误消息,指出Thread_1 EXC_BAD_ACCESS

  28. 28

    为什么此atof()对于非0.0的字符串数字返回0.0?

  29. 29

    调试EXC_BAD_ACCESS

热门标签

归档