首页 > 解决方案 > 无法访问地址 (C) 处的内存

问题描述

我有一个 C 项目在这些函数上出现错误:

char * devolveIDDistritoDoConcelho(char *id_concelho)
{
    return getSubstring(id_concelho, 0,2);
}

int devolveIndexDistritoDoConcelho(char *id_concelho)
{
    int i = stringToInt(devolveIDDistritoDoConcelho(id_concelho))-1;
    return i;
}
char * getSubstring(char *string, int startIndex, int length)
{
    char *substring=(char *)malloc((length+1)*sizeof(char));
    memcpy(substring, &string[startIndex], length);
    substring[length] = '\0';
    return substring;
}
int stringToInt(char * str)
{
    return (int)strtol(str, (char **)NULL, 10);
}

一切顺利,正如我在调试器中看到的那样,(至少在返回之前)源字符串“0101”的子字符串中的值是“01”,但是当它进入函数 stringToInt 时,调试器会"0xffffffffffffffd0 <error: Cannot access memory at address 0xffffffffffffffd0>"为参数str和程序提供值退出。

我已经尝试了很多东西,但问题并没有消失,谁能告诉我为什么会这样?谢谢

标签: cstringtype-conversionintegersubstring

解决方案


推荐阅读