• 问题记录1


    问题1

    1. int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    2. int i = 0, j = 0;
    3. int numlist[2];
    4. for (i = 0; i < numsSize; i++)
    5. {
    6. for (j = 0; j < numsSize; j++) {
    7. if (target == nums[i] + nums[j]) {
    8. numlist[0] = nums[i];
    9. numlist[1] = nums[j];
    10. *returnSize = 2;
    11. return numlist;
    12. }
    13. }
    14. }
    15. *returnSize = 0;
    16. return numlist;
    17. }

    这段程序在编译时会发生报错

    问题原因

    这个函数的问题在于它返回了一个指向局部变量的指针。在函数结束时,局部变量numlist的内存空间将被释放,因此返回的指针将指向无效的内存位置。这可能会导致未定义的行为或程序崩溃

    要解决这个问题,可以使用动态分配内存来创建一个新的数组,或者将数组作为参数传递给函数并在函数内部修改它。

    解决方式
    1. int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    2. int i = 0, j = 0;
    3. int *numlist = malloc(sizeof(int) * 2);
    4. for (i = 0; i < numsSize; i++)
    5. {
    6. for (j = 0; j < numsSize; j++) {
    7. if (target == nums[i] + nums[j]) {
    8. numlist[0] = i;
    9. numlist[1] = j;
    10. *returnSize = 2;
    11. return numlist;
    12. }
    13. }
    14. }
    15. *returnSize = 0;
    16. return numlist;
    17. }

    问题2

    1. struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    2. struct ListNode* sum = (struct ListNode*)malloc(sizeof(struct ListNode));
    3. struct ListNode* tmp1;
    4. struct ListNode* tmp2;
    5. tmp1 = l1;
    6. tmp2 = l2;
    7. while (tmp1 || tmp2)
    8. {
    9. int tmpv1 = tmp1 ? tmp1->val : 0;
    10. int tmpv2 = tmp2 ? tmp2->val : 0;
    11. sum->val = tmpv1 + tmpv2;
    12. tmp2 = tmp2 ? tmp2->next : NULL;
    13. tmp1 = tmp1 ? tmp1->next : NULL;
    14. if (tmp1 || tmp2) {
    15. sum->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    16. sum = sum->next;
    17. } else {
    18. sum->next = NULL;
    19. }
    20. }
    21. return sum;
    22. }

    返回的结果不对

    问题原因

    链表没有回归头结点

    解决方式
    1. struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    2. struct ListNode* sum = (struct ListNode*)malloc(sizeof(struct ListNode));
    3. struct ListNode* tmp1;
    4. struct ListNode* tmp2;
    5. struct ListNode* tmpsum;
    6. int flag = 0;
    7. tmp1 = l1;
    8. tmp2 = l2;
    9. tmpsum = sum;
    10. while (tmp1 || tmp2 || flag)
    11. {
    12. int tmpv1 = tmp1 ? tmp1->val : 0;
    13. int tmpv2 = tmp2 ? tmp2->val : 0;
    14. tmpsum->val = tmpv1 + tmpv2 + flag;
    15. if (tmpsum->val >= 10) {
    16. flag = 1;
    17. tmpsum->val = tmpsum->val - 10;
    18. } else {
    19. flag = 0;
    20. }
    21. tmp2 = tmp2 ? tmp2->next : NULL;
    22. tmp1 = tmp1 ? tmp1->next : NULL;
    23. if (tmp1 || tmp2 || flag) {
    24. tmpsum->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    25. tmpsum = tmpsum->next;
    26. } else {
    27. tmpsum->next = NULL;
    28. }
    29. }
    30. return sum;
    31. }

    问题3

    解决方式

    尽量不要使用循环变量里的值,把握不住

  • 相关阅读:
    C- 使用exit()的优点
    Spring Boot 配置文件这样加密,才足够安全!
    手写杨辉三角
    【软件设计师-下午题总结】
    虚幻C++ day5
    Python|OpenCV-图像的添加和混合操作(8)
    数字孪生技术助力水务行业实现智能化
    一文帮你搞定H5、小程序、Taro长列表曝光埋点
    Smartbi电子表格故事之高效营销活动后的自助数据分析
    如何选择垃圾收集器&安全点&安全区
  • 原文地址:https://blog.csdn.net/weixin_43823970/article/details/133091477