我正在尝试对指向整数的指针数组(而不是整数数组本身)进行排序。
但是当我尝试初始化指向整数数组中整数地址的指针数组时,我的程序崩溃了。
int** pointerSort(int* arr, int size)
{
int i;
// allocate memory for result array and verify success of allocation
int** res = (int**)malloc(size*sizeof(int*));
if (res = NULL)
{
printf("Memory allocation failed\n");
exit(1);
}
// initialize pointers array with addresses
for (i = 0; i < size; i++)
res[i] = &(arr[i]);
// sort the array using merge sort algorithm
mergeSort(res, size-1);
return res;
}
我的程序在res[i] = &(arr[i]);
答案 0 :(得分:12)
if (res = NULL)
此处您将NULL
分配给res
。
您想要比较,而不是分配,您应该使用==
。
值得一提的是,赋值的表达式返回赋值,在这种情况下,它是NULL
。
在您的代码中,if
语句可以评估为false
,即使malloc
无法分配内存。
这是我们应该编写警告的另一个好理由!
答案 1 :(得分:4)
正如其他答案所示,问题是你的作业被用作条件:
if (res = NULL)
但是这里有一个避免这种特定故障模式的提示:将文字放在左侧:
if (NULL = res)
NULL
(和其他文字)不是合法的左值,也就是说 - 它们不是合法分配的,所以如果你或者维护者意外删除了那个关键的二等号字符,你的编译器就会拒绝继续在表达中。