首页 > 解决方案 > 重新分配 size=3 的 char* 时使用 realloc-Problem 时出错

问题描述

我在做一个学校项目,在编写代码时,我收到了关于下一个尺寸无效的错误。我将在这里留下我主要代码中发生的事情的简短版本。当我到达 size=3 时的最终 realloc 时,程序似乎就中断了 谢谢

    #include <stdlib.h>
    int main(){
    char * arga[7];
    arga[1]="2018-11-12";
        arga[2]="2018-11-13";
        arga[3]="EUR";  
        arga[4]="BRL";
        arga[5]="JPY";
        arga[6]="GBP";
        int argc=7;

    int i=4;
        int size=2;
        //int indexes = (sizeof(arga)/sizeof(arga[0]))+1;
        char**moedas=malloc(size*sizeof(char*));
        moedas[0]=arga[3];

        while(i<argc){

            moedas[i-3]=arga[i];
            moedas=realloc(moedas,size*sizeof(char*));
            size++;
            i++;
        }
    }

标签: crealloc

解决方案


您立即写出分配的内存:

int size=0;
char**moedas=malloc(size*sizeof(char*));
moedas[0]=arga[3];

因为索引 0 在 malloc(0) 之外

然后在第一个循环中i是 4 时

moedas[i-3]=arga[i]

因为索引 1 也在 malloc(0) 之外


编辑初始化大小为 1 后,第一个错误消失(索引 0 合法)但不是索引为 1 的第二个错误


推荐阅读