c - 使用 Realloc 超过 3 次时出现段错误

标签 c memory-management

我刚刚了解内存动态,并做了实验,但仍然陷入困境。已经搜索了一些,但没有给出任何结果。

这是我的简单代码:

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

    typedef struct kata kata;
    struct kata {
        char string[256];
    };

void load(kata **data)
{
        int len = 0;

        while( len < 5 ) {


            (*data) = (kata *) realloc ((*data), (len + 1) * sizeof(kata));
            printf("copy A - %d\n", len);

            strcpy(data[len]->string, "A");
            len++;
        }
        getch();
}

int main() {    
    kata *data = NULL;

    load(&data);

}

我的问题是,为什么当我调试它时总是出现段错误(位于 3)?

非常感谢您的建议

编辑:

仍然不知道为什么会发生错误,但我刚刚找到了解决方案..

只需将 data[len]->string 修改为 (*data)[len].string

知道为什么我们调用 data[len]->string 会发生一些随机的段错误吗?

最佳答案

data[len]->string 应为 (*data)[len]->string (*data) [len].string

关于c - 使用 Realloc 超过 3 次时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10772404/

相关文章:

c - C 中的 fork() 信号子进程和父进程

iphone - 使 UIViewController 中的 NSTimer 无效以避免保留周期的最佳时间

php - php中允许的内存大小为33554432字节耗尽(尝试分配43148176字节)

比较C中char数组的子范围

c - C中接收分片UDP数据包的问题

c - 开发与内核通信的应用程序

algorithm - Taking data into memory 在 Java 或任何其他编程语言中是什么意思?

C代码——内存访问/抢占

c++ - 为什么我需要删除[]?

c - 在c中发送十六进制值并检查其位设置