Я пытаюсь использовать указатели для передачи массива строки в и обратно из функции или, в частности, инициализации массива строк в основной функции и используя другую функцию для определения указанного массива. Проблема в том, что я использую цикл for для привязки строки к индексу массива, а когда индекс больше 20 (и, в свою очередь, цикл for), он перестает отвечать. Он отлично работает, когда его меньше или равна 20.C - присвоение массива строк массиву из 21 или более аварий
#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;
}
Что делать, если вы '#define MAXA (MAX + 1)'? –
Всегда инициализируйте свои массивы (до нуля, если ничего больше), чтобы предотвратить случайную попытку доступа к неинициализированному элементу. например 'int pg [MAXA] = {0};' достаточно. Хотя это не требуется строго, это сэкономит вам печаль в долгосрочной перспективе. По той же причине подумайте об использовании 'calloc' вместо' malloc'. Он инициализирует все выделенное пространство 'zero/NULL'. –
@ DavidC.Rankin: Это плохой совет. Если вы не делаете ложных инициализаций (которые компилятор не может оптимизировать, тем самым снижая производительность), большинство компиляторов во многих ситуациях смогут предупреждать о некорректном доступе. – Deduplicator