• 问题记录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++代码重用(二)
    Mysql在项目中相关使用(简单操作数据库)
    低代码物联网平台的业务应用场景有哪些?
    短视频账号系统源码----3年技术源头开发
    css --- 让人上头的flex
    业聚医疗第三次冲刺港交所上市,钱永勋、刘桂祯夫妇为实控人
    将一个项目发布到Tomcat上并进行运行
    R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图(点线图、line plot)、设置add参数为mean可视化不同水平均值的折线图
    Talk预告 | FAIR研究科学家刘壮:高效和可扩展的视觉神经网络架构
    死锁问题【javaEE初阶】
  • 原文地址:https://blog.csdn.net/weixin_43823970/article/details/133091477