创建矩阵和 free() 问题 - c

标签 c

我的代码似乎有一些问题。第一个是我无法正确使用 free 函数:“检测到堆损坏”。 在我工作的第二部分中,我想创建一个矩阵:它在 j 下放置一个红色标记,然后编译器说下标需要数组和指针类型。 我只想创建一个二维矩阵。 感谢您的帮助!!!

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <math.h>
void main()
{
char *word[1000] = { 0 }, letter[1000], *temparr, *originalarr;
int i = 0, j = 0, counter = 0, k = 0, w = 0, anagram = 0, size = 0, *mat;
for (i = 0; letter[i] != '\n'; i++)
{
    letter[i] = getchar();
    counter++;
    if (letter[i] == ' ' || letter[i] == '\n')
    {
        if (letter[i] == 10)
        {
            letter[i] = 0;
            word[j] = malloc(sizeof(char*)*(counter - 1));
            strcpy_s(word[j], (counter - 1) * sizeof(char*), &letter[i - (--counter)]);
            break;
        }
        if (letter[i - 1] == ' ')
            continue;
        letter[i] = '\0';
        word[j] = malloc(sizeof(char*)*counter);
        strcpy_s(word[j], (counter - 1) * sizeof(char*), &letter[i - (--counter)]);
        letter[i] = ' ';
        counter = 0;
        j++;
    }
}
while (j > 0)
{
    printf_s("%s ", word[j--]);
    if (j == 0)
        printf_s("%s", word[j]);
}
for (j = 0; word[j] != 0; j++)
{
    originalarr = (char*)malloc((sizeof(char) * strlen(word[j])));
    strcpy_s(originalarr, strlen(word[j]) + 1, word[j]);
    for (i = 0; word[i] != 0; i++)
    {
        temparr = (char*)malloc((sizeof(char) * strlen(word[i])));
        strcpy_s(temparr, strlen(word[i]) + 1, word[i]);
        counter = 0;
        if (strlen(originalarr) != strlen(temparr))
            continue;
        for (k = 0; originalarr[k] != 0; k++)
        {
            for (w = 0; w < strlen(temparr); w++)
            {
                printf_s("temparr - %c  ", temparr[w]);
                printf_s("original - %c\n", originalarr[k]);
                if (originalarr[k] == temparr[w])
                {
                    temparr[w] = '0';//problem, but cant be equal to 0
                    counter++;
                    printf_s("counter- %d\n", counter);
                }
            }
        }
        if (counter == strlen(originalarr))
            anagram++;
        free(temparr);//problem
    }
}
k = 0;
size = ceil(sqrt(strlen(letter)));
mat = (int*)malloc((sizeof(int) * size));
for (i = 0; i < size; i++)
{
    mat[i] = (int)malloc((sizeof(int) * size));
    for (j = 0; j < size; j++)
        mat[i][j] = '\0';
}
for (i = 0; i < size; i++)
    for (j = 0; j < size; j++)
    {
        mat[i][j] = letter[k];
        k++;
    }
}

最佳答案

对于问题的第二部分,您需要声明一个指向指针mat的指针,而不是像您所做的那样声明一个简单的指针。然后如图所示分配。

int ** mat;
mat = malloc((sizeof(int*) * size));
for (i=0; i<size; i++)
    mat[i] = malloc( sizeof(int) * size));

您可以将此数组mat用作二维数组mat[i][j]

关于创建矩阵和 free() 问题 - c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43994047/

相关文章:

c - C 中的泰勒级数,函数先除后乘

c - 为什么这些构造使用增量前和增量后未定义的行为?

c - 在链表上存储字符串的元素

c++ - 帮助在 gcc 中链接

c++ - 如何在 C++ 中使用全局变量?

C:如何将结构添加到指针数组

计算使用特定值调用函数的次数

c - 为什么函数总是返回0? (C)

c - 我对我的输出感到困惑,该输出给出了用户输入的数字总和的最接近平均值。(将小数点四舍五入为整数)

c - 如何在C中以逗号分隔的十六进制字符串打印定义的int?