使用指针作为数组?

时间:2014-02-28 01:40:06

标签: c arrays pointers

所以我有这个代码

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声明。如果不为数组指定细节,我该怎么做才能解决这个问题。

2 个答案:

答案 0 :(得分:2)

您正在覆盖未分配的内存,其中可能包含非常重要的内容。您需要分配足够的空间来存储50个整数,并将userInput设置为该值。

int *userInput = malloc(sizeof(*userInput)*50);

请勿忘记在使用完毕后致电free(userInput)

答案 1 :(得分:0)

替换

int *userInput;

int userInput[50];

您的代码将有效。

问题是你已经创建了一个指向数组的指针,但是你从未创建任何指向它的内存。上述解决方案确保堆栈上有50个整数的空间,并向其指向userInput。这样,当您访问userInput指向的内存时,就可以使用有效的内存。您现有的代码没有这样的内存,因此您的计算机将尝试写入指针指向的任何内容,这可能是任何内容(无处不在,某些代码,程序中的其他数据等),因为它未初始化