C - 将一个字符串数组分配给一个包含21个或更多崩溃的数组

时间:2014-12-13 21:01:07

标签: c arrays string pointers memory-management

我正在尝试使用指针向函数传递一个字符串数组,或者更具体地说,在main函数中初始化一个字符串数组,并使用另一个函数来定义所述数组。问题是我正在使用for循环将字符串分配给数组索引,并且当索引大于20时(反过来又是for循环)它停止响应。它小于或等于20时工作正常。

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

#define MAX 21
#define MAXA MAX+1
#define SIZEAR 6

void col(int *pgv,char **sizev,int *coffv,int *moffv,int *yoffv) {
    for (int i=0;i<MAX;i++) {
        int m=i%2;
        //Size
        if (m==0)
            strcpy(sizev[i],"Small");
        else
            strcpy(sizev[i],"Large");
    }
}

int main(void) {
    int i,pg[MAXA],coff[MAXA],moff[MAXA],yoff[MAXA];//seen

    char **size = (char**)malloc(MAXA*sizeof(char*));
    for(i=0;i<MAXA;i++)
        size[i]=(char*)malloc(SIZEAR*sizeof(char));

    col(pg,size,coff,moff,yoff);
    return 0;
}

1 个答案:

答案 0 :(得分:3)

#define MAXA MAX+1

由于括号不足,该宏是典型的失败 查看它的使用位置:

size[i]=(char*)malloc(SIZEAR*sizeof(char));

宏观扩张之后:

size[i]=(char*)malloc(MAX + 1*sizeof(char));

作为旁注,sizeof(char)始终是1.
另外,Don't cast the result of malloc (and friends)