尝试释放内存时_crtisvalidheappointer错误

时间:2014-04-13 18:21:42

标签: dynamic-memory-allocation

运行上面的代码时出现_CrtIsValidHeapPointer(pUserData)错误。 有时代码运行完美,有时会出现此消息。所以我猜这个问题与内存分配有关。但是我已经多次查看了代码并且数字对我(以及调试时)也是如此。 我注意到它在调试时发生在“free(str_temp)”行中。

相关代码在这里:

 int main(){

int n;
int len;
char *str;
char command[3];

printf("Enter your string:\n");
scanf("%d", &n);
str = malloc(n+1);
scanf("%s", str);

while (1){

    printf(">");
    scanf("%s", command);


    if (compare(command, "ml")) {
        int k;
        scanf("%d", &k);
        multiply(str, n, k);
        printf("Current string is %s\n", str);
        n = ln(str);
        continue;

    }


free(str);
return 0;
}



void multiply(char *str, int n, int k) {

char *str_temp = malloc(n+1);
int i;
int j;
int q;
for (i = 0; i < n; i++){
    str_temp[i] = str[i];
}
str_temp[n] = '\0';

free(str);
*str = malloc(n*k+1);
for (i = 0; i < k; i++){
    for (j = 0; j < n; j++){
        str[i*n + j] = str_temp[j];
    }
}
str[n*k] = '\0';

free(str_temp);
}

1 个答案:

答案 0 :(得分:0)

尝试使用消息定义

void multiply(char **str, int n, int k)//Use **str(double pointer) instead of *str.

并称之为

multiply(&str, n, k);