gpt4 book ai didi

c - struct 没有从 c 上的函数正确返回

转载 作者:行者123 更新时间:2023-12-04 18:39:27 24 4
gpt4 key购买 nike

我在 lubuntu 上有以下内容:

#include <stdio.h>
#include <stdlib.h>

struct fields{
int hostNumber;
int *numberArray;
};

struct fields *start();
struct fields *gatherData();
void sendMessageToOtherProcesses(struct fields *);

int main(int argc, char** argv) {
struct fields *myFields;

myFields = start();
return 0;
}

struct fields *start(){
int input;
struct fields *myFields;
printf("1) Type 1 For Execution\n");
printf("2) Type 2 For Exit\n");
printf("Give your choice:");
scanf("%d",&input);
switch(input){
case 1:
myFields = gatherData();
break;
case 2:
default:
exit(0);
}
return myFields;
}

struct fields *gatherData(){
int host;
struct fields *myFields;

printf("Give the host of the number to be checked if they are ordered:");
scanf("%d",&host);


int nmbArray[host];

for (int i = 0; i < host; i++){
printf("Give the %d number:", i);
scanf("%d", &nmbArray[i]);
// printf("array=%d\n", nmbArray[i]);
}

myFields->hostNumber = host;
myFields->numberArray = &nmbArray[0];
for (int i = 0; i < (myFields->hostNumber) ; i++){
printf("array=%d\n", (*(myFields->numberArray)));
(myFields->numberArray)++;
}

return myFields;

}
我采取段错误。任何建议。还要看看 for 循环,我不能从通过输入存储的数组中获取数字。在 windows 上完美运行 mingw64 但我现在在 lubuntu 32bit 18.10 机器上。
提前致谢!!!

最佳答案

您忘记在取消引用指针之前分配结构。

  myFields = malloc(sizeof(*myFields)); /* add this to allocate memory */
myFields->hostNumber = host;
myFields->numberArray = &nmbArray[0];
检查是否 malloc()成功将使您的代码更好:
  myFields = malloc(sizeof(*myFields));
if (myFields == NULL) return NULL; /* add this to check if malloc() is successful */
myFields->hostNumber = host;
myFields->numberArray = &nmbArray[0];
还有一点就是数组
  int nmbArray[host];
从函数返回时将被删除,之后指向该函数的指针将变得无用。
改为动态分配:
  int* nmbArray = malloc(sizeof(*mnbArray) * host);
然后,在循环之后, myFields->numberArray更改为指向 nmbArray 的最后一个元素之后的元素, 所以再次设置为 nmbArray循环之后。
它可以通过做
  myFields->numberArray = &nmbArray[0];
再次。

关于c - struct 没有从 c 上的函数正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64843948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com