leetcode 報錯runtime error: load of null pointer of type 'int'


1.題目

Leetcode 1兩數之和

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。

示例:

給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

題目鏈接

https://leetcode-cn.com/problems/two-sum/

2.函數原型

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize){

    int a[2] = {0};
    
    for(int i = 0; i < numsSize-1; i++)
    {
        for(int j = i + 1; j < numsSize; j++)
        {
            if((nums[i] + nums[j]) == target) {
                a[0] = i;
                a[1] = j;
                *returnSize = 2;
                return a;
            }    
        }    
    }
    return a;
}

3.執行報錯信息

Line 207: Char 3: runtime error: load of null pointer of type 'int' (__Serializer__.c)

 

 4.原因分析

因為函數返回的是指針地址指向函數內的局部變量數組,在函數退出時,數組的存儲空間會被銷毀,此時去訪問該地址就會出現這個錯誤。

修改方法一般有3種:

1)返回的指針提前分配空間

2)static修飾變量

3)使用全局變量

5.代碼修改

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize){

    static int a[2] = {0};
    
    for(int i = 0; i < numsSize-1; i++)
    {
        for(int j = i + 1; j < numsSize; j++)
        {
            if((nums[i] + nums[j]) == target) {
                a[0] = i;
                a[1] = j;
                *returnSize = 2;
                return a;
            }    
        }    
    }
    return a;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM