所以我有这个代码
int *userInput; //array place holder
//int max; //Max variable for later use in comparisons
int start = 0; //inital starting point value for loops
int endUserInput; //used to find the total number input
printf("You may enter up to a max of 50 integer values, Please enter the first value: ");
//loop collects the user inputs
/* Using a while loop to check for data to be true in what is entered
to spot when the data becomes false when a letter is entered*/
while (scanf("%d", &userInput[start]) == 1) {
//If statement entered to catch when the total is met
if (start == 49) {
break;
}
start = start + 1;
//Print statement to let user know what value they are at and how to end input
printf("Enter next value %d or enter C to calculate: ", start + 1);
}
它在我的MBP编译器上运行,但在PC上的Dev上它会因内存错误而崩溃?
错误是int *userInput
声明。如果不为数组指定细节,我该怎么做才能解决这个问题。
答案 0 :(得分:2)
您正在覆盖未分配的内存,其中可能包含非常重要的内容。您需要分配足够的空间来存储50个整数,并将userInput设置为该值。
int *userInput = malloc(sizeof(*userInput)*50);
请勿忘记在使用完毕后致电free(userInput)
。
答案 1 :(得分:0)
替换
int *userInput;
与
int userInput[50];
您的代码将有效。
问题是你已经创建了一个指向数组的指针,但是你从未创建任何指向它的内存。上述解决方案确保堆栈上有50个整数的空间,并向其指向userInput
。这样,当您访问userInput
指向的内存时,就可以使用有效的内存。您现有的代码没有这样的内存,因此您的计算机将尝试写入指针指向的任何内容,这可能是任何内容(无处不在,某些代码,程序中的其他数据等),因为它未初始化