我遇到了指针问题。我有一个这样的结构:
typedef struct Concert {
char* nameOfBand;
char* location;} concert;
}
我想要一个动态的结构数组。
所以我需要创建一个变量来存储结构数组,然后向其中添加结构。我怎样才能做到这一点?
我尝试过这个:
//pointer to array
concert** concertArray = (concert**) malloc(sizeof(concert)*5);
//new concert
concert newConcert;
newConcert.nameOfBand = "name1";
newConcert.location = "location1";
//adding item to array
*((*concertArray)+0) = newConcert;
但是编译失败。
最佳答案
正如这里通常出现的问题一样,您没有复制newConcert
。您只是将指针放入数组中的本地(自动)变量,当您从函数返回时,该指针超出范围(不再存在)。使用 malloc
分配一个新的 Concert,然后填写数据(也对每个字符串使用 malloc!!)。以下是一个更完整的示例:
typedef struct Concert {
char* nameOfBand;
char* location;
} concert;
concert** concertArray;
int nConcerts;
int main()
{
int i;
concertArray = malloc(sizeof(concert *)*5); // allocate array
addConcert("name1", "location1"); // add element
// print elements
for (i=0; i<nConcerts; i++)
printf("Name: %s, location: %s\n", concertArray[i]->nameOfBand, concertArray[i]->location);
// free concerts
for (i=0; i<nConcerts; i++) {
free(concertArray[i]->nameOfBand);
free(concertArray[i]->location);
free(concertArray[i]);
}
free(concertArray);
return 0;
}
void addConcert(char *name, char *location)
{
concert *newConcert = malloc(sizeof(concert));
newConcert->nameOfBand = malloc(strlen(name)+1); strcpy(newConcert->nameOfBand, name);
newConcert->location = malloc(strlen(location)+1); strcpy(newConcert->location, location);
concertArray[nConcerts++] = newConcert;
}
关于C - 指向动态结构数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47226251/