指向整数的指针数组

时间:2013-07-15 13:22:59

标签: c arrays sorting pointers

我正在尝试对指向整数的指针数组(而不是整数数组本身)进行排序。

但是当我尝试初始化指向整数数组中整数地址的指针数组时,我的程序崩溃了。

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]);

上崩溃了

2 个答案:

答案 0 :(得分:12)

if (res = NULL)此处您将NULL分配给res
您想要比较,而不是分配,您应该使用==

值得一提的是,赋值的表达式返回赋值,在这种情况下,它是NULL
在您的代码中,if语句可以评估为false,即使malloc无法分配内存。

这是我们应该编写警告的另一个好理由!

答案 1 :(得分:4)

正如其他答案所示,问题是你的作业被用作条件:

if (res = NULL)

但是这里有一个避免这种特定故障模式的提示:将文字放在左侧:

if (NULL = res)

NULL(和其他文字)不是合法的左值,也就是说 - 它们不是合法分配的,所以如果你或者维护者意外删除了那个关键的二等号字符,你的编译器就会拒绝继续在表达中。