我正在尝试使用指针向函数传递一个字符串数组,或者更具体地说,在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;
}
答案 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)。