我正在尝试一个非常基本的程序......它是关于生成一个数组,返回它的指针并在插入排序中使用这个指针。事实是main,sort和generate是程序中的不同文件,当使用指针作为排序函数的参数时,我在指针中没有正确的数字。 我很感激一些帮助!
这就是我生成指针的方法......
int
* (generate_matrix) (int number)
{
srand((unsigned int) time(NULL)); //retirar o null para parar gerar aleatorio
int array_data[number];
ptr = (int *) malloc(number*sizeof(int));
// TODO: comment me
for (int i = 0; i < number; i++)
{
array_data[i] = (rand() % LIMIT);
printf("%d\n", array_data[i]);
}
printf("*****************inside generate array ****************\n");
ptr = &array_data[0];
for (int i = 0; i < number; i++)
printf("%d\n", ptr[i]);
printf("*****************inside generate ptr ****************\n");
return ptr;
}
这是我对它进行排序的方式......
void sort(int ptr[],int number)
{
printf("before sort:\n");
printf("number: %d:\n",number);
for (int i = 0; i < number; i++)
printf("%d\n", ptr[i]);
printf("*************\n");
for (int j=1; j < number; j++)
{
int key = ptr [j];
//printf("%d\n", ptr[j]);
int i = j - 1 ;
while (i >= 0 && ptr [i] > key)
{
ptr [i + 1] = ptr [i];
i--;
ptr [i + 1] = key;
//printf("%d\n", ptr[i])
}
}
printf("Sorted list in ascending order:\n");
for (int i = 0; i < number; i++)
printf("%d\n", ptr[i])
}
通过xcode按照以下答案。
65459 28173 10284
*****************inside generate array **************** 65459 28173 10284
*****************inside generate ptr **************** 65459 28173 10284
***************** after paasage to find **************** before sort: number: 3 0 0 0
************* Sorted list in ascending order: 0 0 0
答案 0 :(得分:2)
那是因为你要将ptr分配给本地数组,例如:
int array_data[number]; // <-- the local array
ptr = (int *) malloc(number*sizeof(int));
你正在失去它的内容:
ptr = &array_data[0];
哪个是内存泄漏。
所以,做:
int* (generate_matrix) (int number) {
srand((unsigned int) time(NULL)); //retirar o null para parar gerar aleatorio
int* ptr = (int *) malloc(number*sizeof(int));
if (NULL == ptr) { // don't forget to check for NULL
// error
return NULL;
}
for (int i = 0; i < number; i++) {
ptr[i] = (rand() % LIMIT);
}
return ptr;
}
就是这样!
至于使用int* ptr
或int ptr[]
之间的区别,我不记得除了语义之外的真正原因(例如:int*
是指向int
的指针,int ptr[]
是一个int数组,但ptr[i]
&lt; =&gt; *(ptr + i))
。